/*
hanoi问题:在source处的盘子通过help处到达target
source:一开始所处的位置
help:盘子可以借助的地方
target:到达的地方
n:盘子的个数
*/
void hanoi(int n, char source, char help, char target) {x++;//如果只有一个盘子,从source到target就好了if (n == 1)cout << source << "->" << target << endl;else {//如果有很多盘子,可以把这个问题分为多个子问题//先把n-1个盘子通过target处移到help处,让最大的一个盘子可以到target处hanoi(n - 1, source, target, help);             //第一步//然后把最大的盘子从source处移到target处,接下来处理help处的n - 1个盘子cout << source << "->" << target << endl;      //第二步//把n - 1个盘子通过source处转移到target处hanoi(n - 1, help, source, target);              //第三步}
}

hanoi()函数的作用就是让n个盘子,从source借助help,到达target.
考虑这个问题时,我们可以从n比较小的时候来考虑
当盘子的个数,即n为3的时候,解题步骤有以下几步
初始状态:

第一步:把1, 2两个盘子借助于C移到B处

第一步对应的就是

//先把n-1个盘子通过target处移到help处,让最大的一个盘子可以到target处
hanoi(n - 1, source, target, help);             //第一步

第二步:把第三块盘子移到C处

第二步对应的是

//然后把最大的盘子从source处移到target处,接下来处理help处的n - 1个盘子
cout << source << "->" << target << endl;      //第二步

第三步:把B处的2个盘子借助A处移到C处


第三步对应的是

//把n - 1个盘子通过source处转移到target处
hanoi(n - 1, help, source, target);             //第三步

当有n个盘子的时候
调用hanoi()函数的次数为2^n - 1

ps:这个递归函数是神的产物,极尽的简洁明了,但又那么令人思考不明所以
ps:今天听老师讲课的时候,突然顿悟hanoi()函数的作用就是让n个盘子从source经过help到target.之前初识这个问题,一只纠结于细枝末节,忘记了函数最本质的功能,实乃舍本逐末.当回归到函数本质上来看,这个问题也就完全彻悟了.
pss:b站上有一个up主,3brown1blue也曾经发布过一个二进制巧解hanoi的问题,实属精品,有兴趣的同志可以前去观看.

编程之路漫漫,虽远,吾亦往.

递归巧解汉诺塔问题(hanoi)相关推荐

  1. C语言递归小游戏—汉诺塔(hanoi)

    前言: 汉诺塔大家都不陌生吧,在猩球崛起这个电影里,人们通过凯撒玩汉诺塔知道了它的智商增高了,这个益智小游戏的规则就是: 汉诺塔(Tower of Hanoi),又称河内塔.是一个源于印度古老传说的益 ...

  2. python递归详解+汉诺塔小案例_汉诺塔,python递归实现解法步骤

    def hanoi(n,x,y,z):#函数实现n个盘子在x,y,z,移动 if n==1: print(x, ' --> ', z) else: hanoi(n-1,x,z,y)#将n-1层个 ...

  3. Bailian4147 汉诺塔问题(Hanoi)

    4147:汉诺塔问题(Hanoi) 总时间限制: 1000ms 内存限制: 65535kB 描述 一.汉诺塔问题 有三根杆子A,B,C.A杆上有N个(N>1)穿孔圆盘,盘的尺寸由下到上依次变小. ...

  4. 递归(二)-------经典递归实例(汉诺塔问题)

    2019独角兽企业重金招聘Python工程师标准>>> 上一篇文章讨论一个经典的递归实例(Fibonacy数列问题),现在来讨论一下另外一个经典的递归例子:汉诺塔问题: 问题描述:在 ...

  5. 汉诺塔(Hanoi Tower)

    问题分析 汉诺塔问题是一个经典的问题.汉诺塔(Hanoi Tower),又称河内塔,源于印度一个古老传说. 大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘. ...

  6. 汉诺塔c语言做法:汉诺塔(Hanoi)是必须用递归方法才能解决的经典问题。它来自于印度神话。上帝创造世界时作了三根金刚石柱子,在第一根柱子上从下往上按大小顺序摞着64片黄金圆盘

    汉诺塔(Hanoi)是必须用递归方法才能解决的经典问题.借助c杆将所有的圆盘移到b杆上,每次只能移一个,且小的盘子一定在大的盘子上面 它来自于印度神话.上帝创造世界时作了三根金刚石柱子,在第一根柱子上 ...

  7. 递归和循环----汉诺塔

    题目: 汉诺塔问题是一个经典的问题.汉诺塔(Hanoi Tower),又称河内塔,源于印度一个古老传说.大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘.大梵 ...

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

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

  9. 汉诺塔(Hanoi)是必须用递归方法才能解决的经典问题。它来自于印度神话。上帝创造世界时作了三根金刚石柱子,在第一根柱子上从下往上按大小顺序摞着64片黄金圆盘,如图7-3所示。

    汉诺塔(Hanoi)是必须用递归方法才能解决的经典问题.它来自于印度神话.上帝创造世界时作了三根金刚石柱子,在第一根柱子上从下往上按大小顺序摞着64片黄金圆盘,如图7-3所示.上帝命令婆罗门把圆盘从下 ...

最新文章

  1. NVIDIA Tensor Cores解析
  2. 分享6款堪称神器却很少有人知道的软件,让人惊喜!
  3. AI处理器热潮正在消退
  4. android 开发使用adb操作sqlite
  5. u32和字符串的转换函数
  6. [其实有加强版的]校门外的树
  7. 用c语言编辑房间长和宽求面积_房间地砖规格怎么选?
  8. 3DMAX 处理反面
  9. 微课视频小学用计算机画画,初识电脑绘画
  10. 字符串科技:Palindrome Series
  11. Mac下的Docker及Kubernetes(k8s)本地环境搭建与应用部署、管理界面kubernetes-dashboard
  12. 【asp.net core 系列】14 .net core 中的IOC
  13. 货币化物联网:实现收益
  14. 一文看懂语音识别 - ASR(基本原理 + 4个实现流程)
  15. Windows用户最佳远程控制器——Xmanager
  16. 【第149期】游戏策划:给@Dimitri的简历分析
  17. FAT32文件系统结构
  18. MySQL在线DDL gh-ost使用说明
  19. DaHua工业相机开发中调试遇到的相机断开问题
  20. 微信小程序getUserProfile详解

热门文章

  1. 基于JAVA动物园管理系统计算机毕业设计源码+系统+lw文档+部署
  2. MATLAB数学建模:数学规划模型
  3. COdevs 2823 锁妖塔
  4. Ngnix 简单使用
  5. Java01:windows7环境下安装jdk
  6. 27 个提升开发幸福度的 VsCode 插件
  7. 上下文监听,网站得访问次数,修改项目路径后数据库更新数据
  8. 物联网传输感知课设-项目实施
  9. 阿里——java后台研发
  10. SQL server 常见的SQL语句总结(最全的)