把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语言经典递归问题(一))相关推荐

  1. C语言:汉诺塔(经典递归问题)

    汉诺塔问题介绍 关于汉诺塔的传说: 法国数学家爱德华·卢卡斯曾编写过一个印度的古老传说:在世界中心贝拿勒斯(在印度北部)的圣庙里,一块黄铜板上插着三根宝石针.印度教的主神梵天在创造世界的时候,在其中一 ...

  2. 汉诺塔——经典递归问题(c语言实现)

    汉诺塔--经典递归问题(c语言实现) 问题背景 汉诺塔问题是一个经典的问题.汉诺塔(Hanoi Tower),又称河内塔,源于印度一个古老传说.大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下 ...

  3. hanoi塔(汉诺塔)--C语言

    hanoi塔(汉诺塔)–C语言 一.什么是hanoi塔 汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具. 大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄 ...

  4. Java 通过递归求解汉诺塔问题 源码 经典递归问题讲解

    汉诺塔问题描述:有三根柱子 A.B.C ,在A从下向上按照从大到小的顺序放着64个圆盘,以B为中介,把盘子全部移动到C上.移动过程中,要求任意盘子的下面要么没有盘子,要么只能有比它大的盘子. 分析:为 ...

  5. 深度理解递归,手撕经典递归问题(汉诺塔,青蛙跳台阶),保姆级教学。

    目录 序言: 一.函数递归( recursion) 二.递归的两个必要条件 三.递归小问题 (1)接受一个整型值(无符号),按照顺序打印它的每一位 (2)编写函数不允许创建临时变量,求字符串的长度(利 ...

  6. python斐波那契前20递归_算法python实现经典递归问题(汉诺塔, 斐波那契数列,阶乘)...

    经典递归 汉诺塔问题 背景故事 传说印度某间寺院有三根柱子,上串64个金盘.寺院里的僧侣依照一个古老的预言,以上述规则移动这些盘子:预言说当这些盘子移动完毕,世界就会灭亡.这个传说叫做梵天寺之塔问题( ...

  7. 汉诺塔python非递归实现,[Python3 练习] 006 汉诺塔2 非递归解法

    题目:汉诺塔 II 接上一篇 [Python3 练习] 005 汉诺塔1 递归解法 这次不使用递归 不限定层数 (1) 解决方式 利用"二进制" (2) 具体说明 统一起见 我把左 ...

  8. C语言递归算法——汉诺塔问题(河内塔)

    汉诺塔(Tower of Hanoi),又称河内塔,是一个源于印度古老传说的益智玩具.大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘.大梵天命令婆罗门把圆盘 ...

  9. python中汉诺塔如何理解_【Python学习之七】递归——汉诺塔问题的算法理解

    汉诺塔问题 汉诺塔的移动可以用递归函数非常简单地实现.请编写move(n, a, b, c)函数,它接收参数n,表示3个柱子A.B.C中第1个柱子A的盘子数量,然后打印出把所有盘子从A借助B移动到C的 ...

最新文章

  1. android预置第三方apk,android 内置APK成系统应用
  2. 国产光刻机正式宣布:今年出货150台
  3. ZBrush中如何做不同图案的遮罩
  4. ios微信小程序下拉刷新怎么配_为什么他的下拉刷新是个动画效果?
  5. linux的终端,网络虚拟终端,伪终端
  6. undolog 是binlog_msyql日志-binlog-undolog-redolog
  7. linux usb视频开发板,ARM开发板上USB 摄像头图像采集实现
  8. ob 接oracle10时接不上怎么办?
  9. greenplum配置高可用_GREENPLUM介绍之数据库管理(七)- 配置数据库高可用性之master镜像 | 学步园...
  10. FFmpeg安卓平台编译
  11. springmvc和json整合配置方法
  12. python最短路径例子_[python]dijkstra 算法的 加权的最短路径 案例
  13. Effective C# Item47:选择安全代码
  14. [原创]测试用例设计策略
  15. Java 实现 1024 小游戏【附源码】
  16. VC2005运行库文件
  17. 写一篇靠谱的方案设计文档-之实践问题清单
  18. 12306验证码图片获取
  19. iOS从零开始,使用Swift:探索基础框架
  20. php 邮件服务器 群发,发送使用PHP群发电子邮件发送使用PHP群发电子邮件(Sending mass email usin...

热门文章

  1. 简单明了 - Git 使用超详细教程
  2. iOS开发UI篇—懒载入
  3. centos7如何安装cloud-init
  4. Oracle-一个中文汉字占几个字节?
  5. 存储过程——介绍(一)
  6. php课程 4-15 数组遍历、超全局数组、表单提交数据(多看学习视频)
  7. Android4.0蓝牙使能的详细解析
  8. python urllib模块学习笔记
  9. 背景图片适应屏幕百分百
  10. add-apt-repository cloud-archive:liberty