c语言递归汉诺塔次数,汉诺塔问题(C语言经典递归问题(一))
把A杆上的金盘全部移到C杆上,并仍保持原有顺序叠好。
操作规则:
每次只能移动一个盘子,并且在移动过程中三根杆上都始终保持大盘在下,小盘在上,操作过程中盘子可以置于A、B、C任一杆上。
思路:
图解:
示例:
当有两个盘a,b时
示例:
当有三个盘a,b,c时
算法分析(递归算法):
实现这个算法可以简单分为三个步骤:
(1) 把n-1个盘子由A 移到 B;
(2) 把第n个盘子由 A移到 C;
(3) 把n-1个盘子由B 移到 C;
从这里入手,在加上上面数学问题解法的分析,我们不难发现,移到的步数必定为奇数步:
(1)中间的一步是把最大的一个盘子由A移到C上去;
(2)中间一步之上可以看成把A上n-1个盘子通过借助辅助塔(C塔)移到了B上,
(3)中间一步之下可以看成把B上n-1个盘子通过借助辅助塔(A塔)移到了C上
递归的代码实现
```#include
void hanoi(int n, char source, char goal, char temp)
{
if (n == 1)
{
printf("Move %d :from %c to %c\n", n, source, goal); //将第n个盘子从source移动到goal
}
else
{
hanoi(n - 1, source, goal, temp);
//将n-1个盘子借助goal从source移动到temp
printf("Move %d :from %c to %c\n", n, source, goal);
//将第n个盘子从source移动到goal
hanoi(n - 1, temp, goal, source);
//将n-1个盘子借助source从temp移动到goal
}
}
int main()
{
int n = 0;
printf("请输入盘子的个数:");
scanf("%d", &n);
hanoi(n, 'A', 'B', 'C');//借助B杆将A中盘移动到C上
return 0;
}```
c语言递归汉诺塔次数,汉诺塔问题(C语言经典递归问题(一))相关推荐
- C语言:汉诺塔(经典递归问题)
汉诺塔问题介绍 关于汉诺塔的传说: 法国数学家爱德华·卢卡斯曾编写过一个印度的古老传说:在世界中心贝拿勒斯(在印度北部)的圣庙里,一块黄铜板上插着三根宝石针.印度教的主神梵天在创造世界的时候,在其中一 ...
- 汉诺塔——经典递归问题(c语言实现)
汉诺塔--经典递归问题(c语言实现) 问题背景 汉诺塔问题是一个经典的问题.汉诺塔(Hanoi Tower),又称河内塔,源于印度一个古老传说.大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下 ...
- hanoi塔(汉诺塔)--C语言
hanoi塔(汉诺塔)–C语言 一.什么是hanoi塔 汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具. 大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄 ...
- Java 通过递归求解汉诺塔问题 源码 经典递归问题讲解
汉诺塔问题描述:有三根柱子 A.B.C ,在A从下向上按照从大到小的顺序放着64个圆盘,以B为中介,把盘子全部移动到C上.移动过程中,要求任意盘子的下面要么没有盘子,要么只能有比它大的盘子. 分析:为 ...
- 深度理解递归,手撕经典递归问题(汉诺塔,青蛙跳台阶),保姆级教学。
目录 序言: 一.函数递归( recursion) 二.递归的两个必要条件 三.递归小问题 (1)接受一个整型值(无符号),按照顺序打印它的每一位 (2)编写函数不允许创建临时变量,求字符串的长度(利 ...
- python斐波那契前20递归_算法python实现经典递归问题(汉诺塔, 斐波那契数列,阶乘)...
经典递归 汉诺塔问题 背景故事 传说印度某间寺院有三根柱子,上串64个金盘.寺院里的僧侣依照一个古老的预言,以上述规则移动这些盘子:预言说当这些盘子移动完毕,世界就会灭亡.这个传说叫做梵天寺之塔问题( ...
- 汉诺塔python非递归实现,[Python3 练习] 006 汉诺塔2 非递归解法
题目:汉诺塔 II 接上一篇 [Python3 练习] 005 汉诺塔1 递归解法 这次不使用递归 不限定层数 (1) 解决方式 利用"二进制" (2) 具体说明 统一起见 我把左 ...
- C语言递归算法——汉诺塔问题(河内塔)
汉诺塔(Tower of Hanoi),又称河内塔,是一个源于印度古老传说的益智玩具.大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘.大梵天命令婆罗门把圆盘 ...
- python中汉诺塔如何理解_【Python学习之七】递归——汉诺塔问题的算法理解
汉诺塔问题 汉诺塔的移动可以用递归函数非常简单地实现.请编写move(n, a, b, c)函数,它接收参数n,表示3个柱子A.B.C中第1个柱子A的盘子数量,然后打印出把所有盘子从A借助B移动到C的 ...
最新文章
- android预置第三方apk,android 内置APK成系统应用
- 国产光刻机正式宣布:今年出货150台
- ZBrush中如何做不同图案的遮罩
- ios微信小程序下拉刷新怎么配_为什么他的下拉刷新是个动画效果?
- linux的终端,网络虚拟终端,伪终端
- undolog 是binlog_msyql日志-binlog-undolog-redolog
- linux usb视频开发板,ARM开发板上USB 摄像头图像采集实现
- ob 接oracle10时接不上怎么办?
- greenplum配置高可用_GREENPLUM介绍之数据库管理(七)- 配置数据库高可用性之master镜像 | 学步园...
- FFmpeg安卓平台编译
- springmvc和json整合配置方法
- python最短路径例子_[python]dijkstra 算法的 加权的最短路径 案例
- Effective C# Item47:选择安全代码
- [原创]测试用例设计策略
- Java 实现 1024 小游戏【附源码】
- VC2005运行库文件
- 写一篇靠谱的方案设计文档-之实践问题清单
- 12306验证码图片获取
- iOS从零开始,使用Swift:探索基础框架
- php 邮件服务器 群发,发送使用PHP群发电子邮件发送使用PHP群发电子邮件(Sending mass email usin...