汉诺塔问题解析(C语言)

2023-05-16

目录

  • 一、什么是汉诺塔问题
  • 二、汉诺塔移动图解
  • 三、代码实现
  • 总结


一、什么是汉诺塔问题

汉诺塔问题是一个经典的问题。汉诺塔(Hanoi Tower),又称河内塔,源于印度一个古老传说。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,任何时候,在小圆盘上都不能放大圆盘,且在三根柱子之间一次只能移动一个圆盘。问应该如何操作?(每次只能移动1个盘子大盘子只能放在小盘子下面

二、汉诺塔移动图解

我们以三阶的汉诺塔为例,假设A柱有3个圆盘,我们要先把2个圆盘从A柱移动到B柱,再把第三个圆盘移动到C柱,最后把2个圆盘移动到C柱。

下面我们看下详细图解:

  1. 我们先将2个圆盘从A柱移动到B柱
    在这里插入图片描述

  2. 将第3个圆盘从A柱移动到C柱
    在这里插入图片描述

  3. 将2个圆盘从B柱移动到C柱
    在这里插入图片描述
    由图,我们可以分析我们把A中的n-1个盘子全部移走,并且空出来了C,所以可以直接把A中的盘子直接移到了C,最后将B上的n-1个盘子移回了C,由此我们可以得出雏形,A,B,C只是“出发站”,“中转站”,“目标站”的代号。接下来我们可以通过代码来帮我们解决问题了。

三、代码实现

定义A,B,C三个字符,表示A,B,C三柱,定义n为阶数,那么n-1也就是移动步骤中,需要移动的圆盘数。
对于一阶汉诺塔,直接移动即可,对于其他的阶数,则需要通过递归展开,为n阶汉诺塔的移动步骤。

#include<stdio.h>
void hanoi(int i, char A, char B, char C)
{
	if ( i== 1)
	{
		printf("%c->%c\n", A, C);
	}
	else
	{
		hanoi(i - 1, A, C, B); //将n-1个圆盘从A移动到B
		printf("%c->%c\n", A, C); //将第n个圆盘从A柱移动到C柱
		hanoi(i - 1, B, A, C); //将n-1个圆盘从B柱移动到C柱
	}
}
int main()
{
	int i = 0;
	scanf("%d", &i);
	hanoi(i, 'A', 'B', 'C');
	return 0;
}


总结

理解汉诺塔问题的核心是尝试去明白其中的递归思想,当过于抽象难以理解的时候我们可以尝试用图文的方式去画出来,方便我们去理解,感谢各位的阅读,如果觉得有用,就点点赞吧,后面会继续更新如青蛙跳台阶的类似函数递归问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

汉诺塔问题解析(C语言) 的相关文章

  • 云计算的三种部署模式:公有云、私有云、混合云

    随着云时代的到来 xff0c 慢慢的演化出了更有针对性的产品服务 xff0c 公有云 xff0c 私有云 xff0c 混合云 那么这三者之间有什么区别呢 xff1f 我们用打比方的方式来说明 例如我们来到一个城市需要睡觉 xff0c 就要去
  • 机器学习之随机森林(sklearn)

    文章目录 1 概述1 1 集成算法的概述1 2 sklearn中的集成算法 2 RandomForestClassfier2 1 重要参数2 1 1 控制基评估器的参数2 1 2 n estimators2 1 3 random state
  • AM5728 高性能计算(并行计算)OpenCL/OpenMP简介及测试

    一 OpenCL OpenMP简介 OpenCL Open Computing Language 是一个为异构平台编写程序的框架 xff0c 属于API xff0c 和OpenGL架构类似 xff0c 此异构平台可由CPU xff0c GP
  • Linux线程调度

    对于一个嵌入式多任务 多线程操作系统 xff0c 所启动的应用进程至少拥有一个线程或多个线程 xff0c 线程在进程中执行代码 一个进程能够 同时 运行多个线程 xff0c 同时 加上引号 xff0c 因为实际上 xff0c 在单处理CPU
  • /usr/bin/xauth: file /.../.Xauthority does not exist

    继我这篇博客解决了x11forwarding问题 xff0c 安装了xorg x11 xauth后 xff0c 又出现了新问题 xff0c Xauthority does not exist xff0c 真是够了 https blog cs
  • ORB-SLAM2在window下的配置 (4)

    配置DBoW2 接下来谈一谈DBoW2的配置 xff0c 难度稍微大一点点 xff0c 它存在于ORB SLAM2的源码中 xff0c 其作者也说了 xff0c 它跟g2o一样都被修改过了 xff0c 所以我们还是直接用ORB SLAM2自
  • ORB-SLAM2在window下的配置 (7)[END]

    部署ORB SLAM2 此系列博客终于接近尾声 xff0c 走过前方配置依赖库的漫漫长路 xff0c 我们终于要来部署ORB SLAM2了 xff01 ORB SLAM2源码下载 xff1a https github com raulmur
  • ubuntu18.04 apt源的添加、修改

    1 软件源 在Ubuntu下 安装软件常时 xff0c 常用apt命令如下 sudo apt get install name 如果源里面没有找到name xff0c 则无法安装该软件 2 源安装的原理 Ubuntu 自带了 apt的软件包
  • H3C链路聚合

    实验拓扑 图 1 1 注 xff1a 如无特别说明 xff0c 描述中的 R1 或 SW1 对应拓扑中设备名称末尾数字为 1 的设备 xff0c R2 或 SW2 对应拓扑中设备名称末尾数字为 2 的设备 xff0c 以此类推 xff1b
  • MapReduce实现二次排序

    默认情况下 xff0c Map输出的结果会按照key进行排序 xff0c 但在实际的应用中 xff0c 有时间我们不仅要对key进行排序 xff0c 同时还要对value进行排序 xff0c 这时候就要用到mapreduce中的二次排序 一
  • rosbag 从旧topic,迁移到新topic

    rosbag 从旧topic xff0c 迁移到新topic source 目标devel setup bash文件生成rules bmr迁移规则 rosbag check in bag g rules bmr修改迁移规则文件rules b
  • 研究生阅读文献技巧

    研究生如何做文献阅读和阅读笔记 以后大部分内容综合自PPT 研究生如何做文献阅读和阅读笔记 和 How to Read Paper 若侵权删 首先是一位研究生老师的建议 xff1a 今后大家提交的论文阅读笔记和工作报告尽量用英文写 可以直接
  • asp.net中执行exe应用程序

    在asp net中执行应用程序有两种方法 xff1a 1 调用win32函数ShellExecute 2 用 NET Framework中的Process类 下面我分别用这两种方法执行Windows中的记事本程序notepad exe 新建
  • Win10 安装Tensorflow-GPU版教程(附CUDA安装 could not fine compatible graphic hardware问题解答)

    入了深度学习的坑 xff0c 需要搭建Tensorflow环境 xff0c 虽然渣渣显卡 xff0c 但是总比CPU来得快 xff0c 果断选择GPU版 在网上找了很多资料 xff0c 受益颇多 但是由于tensorflow最近更新了 xf
  • 带你了解无人机的大脑-飞控

    无人机大脑 xff1a 飞控 无人机之所以能够在空中自主飞行就是因为无人机也和人一样 xff0c 也拥有一个大脑 xff0c 究竟是什么样的一个大脑才能够控制一架飞机在空中自动驾驶呢 xff1f 一起来看看 通俗点说 xff0c 能够自主起
  • STM32F103串口(ISP)下载

    1 ISP简介 ISP Iin System Programming 在系统可编程 xff0c 指电路板上的空白器件可以编程写入最终用户代码 xff0c 而不需要从电路板上取下器件 xff0c 已经编程的器件也可以用SP方式擦除或再编程 I
  • 用Docker搭建更酷的本地开发环境

    以前要在本地跑一些有意思的工程和实验 xff0c 都需要通过在本地装上一大堆软件来实现 最近发现有一种更酷的方式 xff1a Docker 用Docker在本地搭建开发环境有一系列显而易见的优势 xff1a 不用依赖公司的资源 xff0c
  • 只需修改一个像素,让神经网络连猫都认不出 | 论文+代码

    夏乙 编译整理 量子位 出品 公众号 QbitAI 想骗过神经网络 xff0c 让它认错图像 xff0c 需要对图像做多少修改 xff1f 一个像素就够了 一项来自日本的研究表明 xff0c 改动图片上的一个像素 xff0c 就能让神经网络
  • 小米迎来NLP首席科学家王斌:中科院研究员,雷军崔宝秋亲学弟

    雷刚 发自 凹非寺 量子位 报道 公众号 QbitAI 曾经武大郎 xff0c 今日小米科学家 小米又有AI科学家加盟 xff0c 这次是中国科学院信息工程研究所研究员王斌 xff0c 他将出任小米AI实验室NLP首席科学家 xff0c 负

随机推荐

  • IGMPv1,v2,v3详解

    简介 IGMP IGMP Internet Group Management Protocol xff09 作为因特网组管理协议 xff0c 是TCP IP协议族中负责IP组播成员管理的协议 xff0c 它用来在IP主机和与其直接相邻的组播
  • 华为最强AI芯片麒麟980发布:全球首款7nm手机芯片,双核NPU,6项世界第一

    安妮 雷刚 发自 凹非寺 量子位 报道 公众号 QbitAI 遥遥领先 xff01 这是华为消费者业务CEO余承东放下的狠话 xff0c 他说自家即将推出的手机芯片麒麟980 xff0c 将在全球范围内遥遥领先 而且领先的不是别家 xff0
  • Haar小波提升算法

    传统的小波变换是在傅里叶变换的基础上演变而来 xff0c 计算过程中存在着大量的卷积运算或是乘累加的计算 xff0c 如若在硬件上实现 xff0c 势必会消耗大量的寄存器资源 xff0c 而且速度也上不去 提升小波又称为第二代小波 xff0
  • 【Docker学习】Docker Hub + GitHub实现镜像自动构建

    近期学习Docker的相关知识 xff0c 尝试了一下Docker Hub 43 GitHub自动构建镜像 xff0c 在此记录一下过程 将GitHub账号关联到Docker Hub账号 设置位置 下滑到Linked Accounts xf
  • spring整合mybatis报错Cause: org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 1; 前言中不允许有内容

    在spring的配置文件中配置mybatis时使用的是 xff1a span class hljs comment lt 控制和MyBatis整合 gt span span class hljs tag lt span class hljs
  • linux中UDP编程

    在前面的文件中 xff0c 我们介绍了linux网络编程中与IP相关的知识和常用的函数总结 xff0c 本文针对具体的UDP通信 xff0c 来详细的介绍UDP通信的使用 xff0c 包括UDP通信中的点对点通信 xff0c 多播 xff0
  • 语音增强--卡尔曼滤波介绍及MATLAB实现

    语音增强 卡尔曼滤波 状态方程 x k 43 1 61
  • 树莓派官方系统(raspbian)安装及使用教程

    以下内容为本人原创 xff0c 欢迎大家观看学习 xff0c 禁止用于商业用途 xff0c 作者 xff1a 64 Yhen 原文网站 xff1a CSDN 原文链接 xff1a https blog csdn net Yhen1 arti
  • 主键和外键的区别

    一 什么是主键 外键 主键 xff1a 关系型数据库中的一条记录中有若干个属性 xff0c 若其中某一个属性组 注意是组 能唯一标识一条记录 xff0c 该属性组就可以成为一个主键 比如 1 学生表 学号 xff0c 姓名 xff0c 性别
  • C++中,使用libCurl实现http的post请求

    span class token macro property span class token directive hash span span class token directive keyword include span spa
  • nodejs版本管理NVM

    nodejs版本管理NVM NVM全称 xff08 Node Version Manager xff09 是一个用来管理node版本的工具 因为在开发electron版本应用时遇到了 xff0c nodejs使用版本冲突 xff0c 所以我
  • OSPF中DR、BDR竞选机制【转载】

    OSPF DR BDR 竞选机制详解 OSPF 上篇技术文章中提到了建立邻居和邻接关系 xff0c 而邻居关系建立成功之后 xff0c 在broadcast NBMA网络上会进行DR BDR竞选 DR产生背景 在MA网络中 xff0c 任意
  • Citrix Receiver在linux系统(Ubuntu)下的安装使用

    本文为解决在linux系统下Citrix Receiver安装完成后无法登录服务器的情况 xff0c windows下没有这个问题 其中报错为无法识别安全证书 提示 xff1a no such file or directory verif
  • ORA-28000:the account is locked错误解决

    Oracle数据库日志中出现ORA 28000 the account is locked的错误 xff0c 可以按下面的步骤处理 xff1a 1 查询FAILED LOGIN ATTEMPTS参数默认值 xff0c 这个参数限制了从第一次
  • 在Ubuntu上安装boost库

    boost中 xff0c 用到了别的函数库 xff0c 所以为了使用boost中相应的功能 xff0c 需要先安装系统中可能缺失的库 apt get install mpi default dev 安装mpi库 apt get instal
  • 嵌入式平台算法优化

    嵌入式平台算法优化 目录 目录 前言 4 1 嵌入式系统优化流程 6 1 xff0c 选用更优的算法 6 2 xff0c 选择嵌入式平台型号 6 3 xff0c 算法优化一般流程 9 2 高效的编程 15 1 xff0c 数据类型 15 2
  • [028] Gazebo构建Kinect模型,在RVIZ中显示点云PointCloud2出错:点云位姿错误,浮在空中

    一 Bug描述 1 发生错误的 urdf代码 xff08 也不是代码错误 xff0c 是gazebo的bug xff09 lt link name 61 34 camera link 34 gt lt visual gt lt origin
  • Win10校园网宽带连接频繁秒断

    问题 xff1a 宽带连接连上过后很快就断开 解决方法 xff1a 1 Win 43 R输入regedit打开注册表编辑器 2 打开路径 xff1a 计算机 HKEY LOCAL MACHINE SYSTEM ControlSet001 S
  • UML类图--泛化关系

    泛化关系 Generalization 属于类的继承关系 xff0c 表明了子类如何特化或实现父类的属性和方法 UML类图表示 xff1a 箭头指向 xff1a 带箭头的实线 xff0c 箭头指向父类 代码实现 xff1a 测试类 publ
  • 汉诺塔问题解析(C语言)

    目录 一 什么是汉诺塔问题二 汉诺塔移动图解三 代码实现总结 一 什么是汉诺塔问题 汉诺塔问题是一个经典的问题 汉诺塔 xff08 Hanoi Tower xff09 xff0c 又称河内塔 xff0c 源于印度一个古老传说 大梵天创造世界