CSDN话题挑战赛第2期
参赛话题:学习笔记
??工具分享:
- 刷题: 牛客 leetcode
- 笔记软件:有道云笔记
- 画图软件:Xmind(思维导图) diagrams(流程图)
汉诺塔解法
动画讲解递归思路
我们从圆盘个数上,从少到多,来分析一下解决方法,一下我们用n来表示圆盘个数
我们用A B C或者起始柱 辅助柱 目标柱 来表示柱子
n = 1时
n = 3
同样的,3层的哈诺塔也已经在n = 3的时候演示。
类推:无论多少个圆盘,就能给他分解成三步,就类似于把大象装进冰箱
递归思路:有n个圆盘需要从A(起始柱)移到C(目标柱),借助B(辅助柱)
可以分解陈有n -1圆盘从A移动到B,底盘从A移动到C,n-1个圆盘从B移动到C
特别注意,进行多圆盘移动的时候,是需要辅助柱的
代码实现汉诺塔
递归的优缺点
优点:
非常明显,这种大事化小的思维方式,可以大大缩减我们的代码量,便于理解理解整体逻辑
缺点:
- 与现实生活的思维方式相差较大,不容易想
- 递归程度太深会造成栈溢出(例如死递归)
- 部分题目用递归实现特别低效(例如斐波那契)
64层汉诺塔等于宇宙毁灭h4>
已经有人开玩笑说:等你把64层汉诺塔解完,宇宙的毁灭了。
其实这也是可能的,前提是那个人是一个永生的人。
百度百科上面查询到,28亿宇宙将灭亡,咱们也不是什么大科学家,姑且不谈其真假性,我们来计算一下人解完64层需要花多少时间。
首先我们计算一下n层汉诺塔,需要移动圆盘多少次p>
咱们使用上面的程序来找找规律,当然如果你是一个数学大佬,也可以使用数学知识来计算。
n = 3–7次
找规律我们不难发现,n层汉诺塔需要移动圆盘 2的n次方减1次,如果说64层汉诺塔
那就需要移动圆盘2^64 – 1次,即1844.67亿亿
如果一个人移动一次圆盘需要1秒钟,也需要1844.67亿亿秒,很明显,宇宙大人早就去世了。
??OK,咱们折起就讲到这里,希望大家能够听懂汉诺塔问题,咱们下期见!
![]()
文章知识点与官方知识档案匹配,可进一步学习相关知识C技能树首页概览115933 人正在系统学习中
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!