想象你来到某个热带丛林,意外发现了十层之高的汉诺塔。正当你苦苦思索如何搬动它时,林中出来一个土著,毛遂自荐要帮你搬塔。他名叫二傻,戴着一个草帽,草帽上有一个2字,号称会把一到二号盘搬到任意柱。

你灵机一动,问道:“你该不会有个兄弟叫三傻吧?”
“对对,老爷你咋知道的?他会搬一到三号盘。“
”那你去把他叫来,我不需要你了。“
于是三傻来了,他也带着个草帽,上面有个3字。

你说:”三傻,你帮我把头三个盘子移到c柱吧。“
三傻沉吟了一会,走进树林,你听见他大叫:”二傻,出来帮我把头两个盘子搬到C!“

由于天气炎热你开始打瞌睡。朦胧中你没看见二傻是怎么工作的,二傻干完以后,走入林中大叫一声:“老三,我干完了!”

三傻出来,把三号盘从A搬到B,然后又去叫二傻:“老二,帮我把头两个盘子搬回A!”

余下的我就不多说了,总之三傻其实只搬三号盘,其他叫二傻出来干。最后一步是三傻把三号盘搬到C,然后呼叫二傻来把头两个盘子搬回C

事情完了之后你把三傻叫来,对他说:“其实你不知道怎么具体一步一步把三个盘子搬到C,是吧?”

三傻不解地说:“我不是把任务干完了?”

你说:“可你其实叫你兄弟二傻干了大部分工作呀?”

三傻说:“我外包给他和你屁相干?”

你问到:“二傻是不是也外包给了谁?“

三傻笑了:“这跟我有屁相干?”

你苦苦思索了一夜,第二天,你走入林中大叫:“十傻,你在哪?”

一个头上带着10号草帽的人,十傻,应声而出:“老爷,你有什么事?”

“我要你帮把1到10号盘子搬到C柱“

“好的,老爷。“十傻转身就向林内走。

“慢着,你该不是回去叫你兄弟九傻吧“

“老爷你怎么知道的?“

“所以你使唤他把头九个盘子搬过来搬过去,你只要搬几次十号盘就好了,对吗?“

“对呀!“

“你知不知道他是怎么干的?“

“这和我有屁相干?“

你叹了一口气,决定放弃。十傻开始干活。树林里充满了此起彼伏的叫声:“九傻,来一下!“ “老八,到你了!““五傻!。。。“”三傻!。。。“”大傻!“

你注意到大傻从不叫人,但是大傻的工作也最简单,他只是把一号盘搬来搬去。

若干年后,工作结束了。十傻来到你面前。你问十傻:“是谁教给你们这么干活的?“

十傻说:“我爸爸。他给我留了这张纸条。”

他从口袋里掏出一张小纸条,上面写着:“照你帽子的号码搬盘子到目标柱。如果有盘子压住你,叫你上面一位哥哥把他搬走。如果有盘子占住你要去的柱子,叫你哥哥把它搬到不碍事的地方。等你的盘子搬到了目标,叫你哥哥把该压在你上面的盘子搬回到你上头。“

你不解地问:“那大傻没有哥哥怎么办?“

十傻笑了:“他只管一号盘,所以永远不会碰到那两个‘如果’,也没有盘子该压在一号上啊。”

但这时他忽然变了颜色,好像泄漏了巨大的机密。他惊慌地看了你一眼,飞快地逃入树林。

第二天,你到树林里去搜寻这十兄弟。他们已经不知去向。你找到了一个小屋,只容一个人居住,但是屋里有十顶草帽,写着一到十号的号码。

从汉诺塔讲递归的思考方式相关推荐

  1. 汉诺塔问题 [递归 + 抽象]

    汉诺塔 前言 一.题意 二.抽象思维 1.源码 三.扩展 1.分析 2.源码 总结 参考文献 前言 汉诺塔问题,是学习递归的第一个算法题,也是非常经典的递归问题.由于它是双递归问题,所以初学时不易理解 ...

  2. 数据结构与算法—递归算法(从阶乘、斐波那契到汉诺塔的递归图解)

    目录 递归介绍 递归求阶乘 递归求斐波那契 递归解决汉诺塔 总结 递归介绍 递归:就是函数自己调用自己. 子问题须与原始问题为同样的事,或者更为简单: 递归通常可以简单的处理子问题,但是不一定是最好的 ...

  3. 【恋上数据结构】递归(函数调用过程、斐波那契数列、上楼梯、汉诺塔、递归转非递归、尾调用)

    递归(Recursion) 什么是递归? 函数的调用过程(栈空间) 函数的递归调用过程 递归实例分析(1 + 2 + 3 + ... + 100 的和) 递归的基本思想.使用套路 斐波那契数列 fib ...

  4. 汉诺塔的递归逐步详解

    文章目录 汉诺塔介绍 递归代码实现 以三个盘子为例逐步详解 汉诺塔介绍 如上图,有三根柱子A,B,C,在A柱子上有N个盘子(图上只画了三个),利用这三根柱子和N个盘子进行汉诺塔游戏,需要最终将A柱子上 ...

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

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

  6. labview求n阶乘的和_递归算法(从阶乘、斐波那契到汉诺塔的递归图解)

    递归介绍 递归:就是函数自己调用自己. 子问题须与原始问题为同样的事,或者更为简单: 递归通常可以简单的处理子问题,但是不一定是最好的. 对于递归要分清以下概念: 自己调用自己 递归通常不在意具体操作 ...

  7. 汉诺塔问题递归算法python代码_[python]汉诺塔问题递归实现

    一.问题描述及算法步骤 汉诺塔问题的大意是有三根柱子a, b, c,现在a柱有N个盘子从下往上尺寸递减排列,要求: 1. 将a上的盘子移动到c柱上; 2. 每次移动一个盘子; 3. 柱子上的盘子始终必 ...

  8. 汉诺塔的递归实现,看完就懂了

    对于要实现汉诺塔递归程序的同学,我相信有一部分同学还没有真正的玩过汉诺塔这个游戏,我建议先在手机应用商店下载一个汉诺塔游戏去感受一下,当了解了游戏的玩法之后,也更方便你去理解递归代码的逻辑. 下面通过 ...

  9. 1-算法-hanoi汉诺塔问题- 递归

    汉诺塔问题用递归解决 问题抽象 递归都是从最原始的地方回溯 到解决这个大问题 Void hanoi(int n,char A,char B,char C) {if(n == 1) move(1,A,C ...

最新文章

  1. python解压_python解压缩
  2. 二分图的匹配问题以及求解算法
  3. 【SQL】使用调用层接口
  4. tableau可视化数据分析60讲(六)-数据连接及数据混合
  5. 在Spring中使用JDBCJobStore配置Quartz
  6. Java字符类isUpperCase()方法与示例
  7. 【LeetCode笔记】143. 重排链表(Java、链表、栈、快慢指针)
  8. 学习JavaScript数据结构与算法-----pdf 分享
  9. b丅151组成的充电器电路_一文读懂uc3842组成的开关电源电路
  10. iOS 使用FFmpeg
  11. mysql 大事物commit慢造成全库堵塞问题
  12. java jre32下载_JRE7 32位官方下载
  13. 【图论】Graph Fourier Transform
  14. android GMS介绍
  15. 3DMAX卸载/完美解决安装失败/如何彻底卸载清除干净3DMAX各种残留注册表和文件的方法...
  16. FFMpeg-6、Libavdevice+SDL捕获显示摄像头、录屏
  17. 游戏程序员的2012年终总结
  18. 宏正自动科技推出首款触摸屏LCD KVM多电脑切换器
  19. 2021年缆索式起重机司机考试内容及缆索式起重机司机理论考试
  20. SqlServer 如何插入图片和导出图片数据

热门文章

  1. python使用阿里云sdk
  2. JavaSE(十)之反射
  3. Codeforces #264 (Div. 2) D. Gargari and Permutations
  4. OMAP-L138核心板
  5. SSDT – Error SQL70001 This statement is not recognized in this context-摘自网络
  6. 第一个实例-----我与node.js的第一步接触
  7. Siri:开启智能语音营销时代
  8. B/S模式下如何使软件屏蔽系统热键
  9. 线上的java环境_Linux部署JavaWeb线上环境
  10. python变量运算符_Python基础 — 变量和运算符