关于汉诺塔问题,这里有一个传说:

        法国数学家爱德华·卢卡斯曾编写过一个印度的古老传说:在世界中心贝拿勒斯(在印度北部)的圣庙里,一块黄铜板上插着三根宝石针。印度教的主神梵天在创造世界的时候,在其中一根针上从下到上地穿好了由大到小的64片金片,这就是所谓的汉诺塔。不论白天黑夜,总有一个僧侣在按照下面的法则移动这些金片:一次只移动一片,不管在哪根针上,小片必须在大片上面。僧侣们预言,当所有的金片都从梵天穿好的那根针上移到另外一根针上时,世界就将在一声霹雳中消灭,而梵塔、庙宇和众生也都将同归于尽。                                                                                 ——(来源于百度百科)

果真,只有数学家才会提出这样会让人初步抓狂的事情。

重要的事情是,这个事情还有预言,天知道,当初玛雅预言2012年12月21日的时候,当初我紧张的要死,生怕第二天看不到隔壁家的小妹妹了。

本次的预言如果实现的话,估计是没有痛苦的:这件事完成时宇宙会在一瞬间闪电式毁灭。也有人相信婆罗门至今还在一刻不停地搬动着圆盘。

下面进入分析阶段,着急的小伙伴请直接看后面代码

很多人初步一看,这就是个预言,能有啥?可是你要看前面,这是一个数学家提出的问题,数学家一般不会讲故事,他一旦讲故事,多半会让人崩溃。比如,在没有数学模型之前,你是不是和我一样,有些发懵,什么宝石针,为什么是64片,为什么每一次只能移动一个,还得小的必须在上面,究竟是什么样的呢?

别怕,来看一下图片,缓解一下你有些发懵的大脑:

看完图,是不是好一些呢,其实就是这样的有三根柱子,我们分别命名为ABC,原来是在A柱上有64颗圆盘,现在是要把这些圆盘移动到C上,中间可以临时把圆盘放在C上,B柱为过渡用的。

其实,我们在分析任何问题的时候都可以借助模型,因为人脑对于图画的感受要远远强于对文字的感悟

  我们先不管他有 多少个圆盘(假设为n个)

第一:假设只有一个圆盘(n=1):

那是不是就一步就可以了,也就是直接把圆盘从A挪到C上,就可以了,表示为 A --> C;

第二:假设只有两个圆盘(n=2):

我们先把小圆盘从A移动到B,表示为A --> B,

其次把大圆盘从A移动到C,表示为 A --> C,

最后把小圆盘从B移动到C,表示为 B --> C;

第三:假设有三个圆盘(n=3):

先把最小的圆盘移动到C,表示为 A --> C,

第二次把中间的圆盘移动到B,表示为A --> B,

第三次把小圆盘从C移动到B,表示为C --> B,

第四次把大圆盘从A移动到C,表示为A --> C,

第五次把小圆盘从B移动到A,表示为B --> A,

第六次把中间的圆盘从B移动到C,表示为B --> C,

最后把小圆盘从A移动到C,表示为A --> C;

提前看一下代码演示:

第四:假设有n个圆盘呢(n=n):

我们该怎么办呢?

别急,来一杯82年的可乐丫丫筋

请欣赏:

我们可以把n个圆盘,分成两部分:第n个,和剩下的n-1个

接下来把n-1个通过C移动到B上

再把A上的第n个移动到C上,

最后把n-1个移动到C上

大家,不用管中间是怎么移动的,就把他看成是两个部分,这里涉及到了递归的思想,程序调用自身的编程技巧称为递归( recursion),这些都交给计算机去办,比如在上述问题中计算机会把n-1个圆经过C移动到B上,再把第n个移动到C上,然后他接着会回去处理剩下的n-2个,经由C移动到A上,把第n-1个移动到C上,也就是如下图所示的样子:

大家发现了没有,是不是又回到我们最初的样子了,依次是把n-3个经由C移动到B上,再把剩下的第n-2个移动到C上,然后再把第n-4个移动经由C移动到A上,把第n-3个移动到C上...依次类推,直到最后一个完整的移动到C上,我们可以看出在移动的过程中可以不断的重复之前的动作,放到数学和编程里面来说,就是他在不断的调用自身,直到完成要求。

Python代码演示:

def hanoi(n,a,b,c):'''n:圆盘的个数,a:汉诺塔的A柱,b:汉诺塔的B柱,c:汉诺塔的C柱'''if n == 1:print(a,"-->",c)return Noneif n == 2:print(a,"-->",b)print(a,"-->",c)print(b,"-->",c)return Nonehanoi(n-1,a,c,b)#把n-1个盘子从A,由C,移动到B上print(a,"-->",c)hanoi(n-1,b,a,c)#把n-1个盘子从B,经由A,移动到C上a = "A"
b = "B"
c = "C"
n = 1
hanoi(n,a,b,c)A --> Cn = 2
hanoi(n,a,b,c)A --> B
A --> C
B --> Cn = 3
hanoi(n,a,b,c)A --> C
A --> B
C --> B
A --> C
B --> A
B --> C
A --> C

插图详解Python解决汉诺塔问题相关推荐

  1. 用 python 解决汉诺塔问题并附带演示过程

    用 python 解决汉诺塔问题并附带演示过程 参考文章: (1)用 python 解决汉诺塔问题并附带演示过程 (2)https://www.cnblogs.com/shinawear/p/1061 ...

  2. python汉诺塔递归算法流程图,python实现汉诺塔递归算法经典案例

    Python汉诺塔递归问题 python请用递归算法编程解决汉诺塔问题 在线等 关于python递归函数实现汉诺塔 def move(n,a,b,c): #1 if n==1: #2 print(a, ...

  3. python 游戏 —— 汉诺塔(Hanoita)

    python 游戏 -- 汉诺塔(Hanoita) 一.汉诺塔问题 1. 问题来源 问题源于印度的一个古老传说,大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆 ...

  4. 2.2基本算法之递归和自调用函数_用栈算法递归解决汉诺塔问题

    今天博主收一下线性表的尾,最近我们要学习的内容是栈和队列板块,栈和队列板块分为两讲,第一讲也就是今天我们主要学习栈的相关知识,包括栈的定义.栈的顺序表示及实现,栈的链式表示,栈的应用举例,以及栈递归实 ...

  5. c语言递归汉诺塔次数,c语言递归解决汉诺塔参数变化的疑惑

    c语言递归解决汉诺塔参数变化的疑惑 答案:3  信息版本:手机版 解决时间 2020-04-05 14:20 已解决 2020-04-05 10:49 #include void main() {vo ...

  6. python中汉诺塔如何理解_python汉诺塔问题的递归理解

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

  7. 使用Python查看汉诺塔移动详细过程

    汉诺塔属于比较经典的问题,详见以前的文章Python模拟汉诺塔问题移动盘子的过程,基于非递归算法的汉诺塔游戏之Python实现. 本文代码功能:模拟移动汉诺塔上的盘子,并实时显示3根柱子上盘子的情况. ...

  8. c语言递归解决汉诺塔问题

    c语言递归解决汉诺塔问题 参考文章: (1)c语言递归解决汉诺塔问题 (2)https://www.cnblogs.com/didiaoxiaoguai/p/6686407.html 备忘一下.

  9. 数据结构之递归算法解决汉诺塔问题

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

  10. python递归算法 - 汉诺塔问题

    python递归算法 - 汉诺塔问题 经典汉诺塔问题: 有三根柱子a,b,c,在一根柱子a上,从下往上按照从大到小的顺序摞着64片黄金圆盘.把所有圆盘从下往上按从大到小的顺序重新摆放在另一根柱子c上. ...

最新文章

  1. 个人站立会议(11月24日)
  2. 第一篇:VC连接MySql
  3. 天通苑海鲜餐馆数据调查,很难想象消费越贵越受欢迎
  4. android 保存退出之前的页面_项目实战:Qt+Android模拟操作器(模拟操作app,打开,点击,输入,获取验证码等等)...
  5. boost::geometry::tuples用法的测试程序
  6. 贝叶斯分类器_python机器学习API介绍10:多项式贝叶斯分类器
  7. java弹出虚拟键盘_JS实现电脑虚拟键盘的操作
  8. 华为专家助你1个月拿下物联网高工认证,首次提供全方位就业指导!
  9. Ubuntu 16.4中root不能使用tab键来补全命令的解决方法
  10. 安装ugjava安装在哪里_讨论!空调安装安全绳该挂哪里
  11. Datawhale 零基础入门CV赛事-Task2 数据读取与数据扩增
  12. 白化(Whitening): PCA白化 ZCA白化
  13. android访问链接,尝试使用Android访问本地Web服务时连接被拒...
  14. 如何批量将 Word 文档转为 PDF 格式
  15. svn忽略不需要同步的文件夹_配置管理-SVN使用指南 - wuli潇潇
  16. Star Way To Heaven 题解
  17. 高中计算机在线使用方法,高中-信息技术-手动搜题-在线组卷
  18. 如何写毕业论文(个人心得,不是保姆级)
  19. 2019日历全年一张_2020年剑桥英语全年考试日历发布,参与活动还能赢取实体台历!...
  20. jmpi 与ljmp指令分析

热门文章

  1. (XWZ)的python学习笔记——pandas
  2. 微信小程序—智能停车
  3. 笔试占比近40%,中国人民大学高瓴人工智能学院2022年夏令营来袭
  4. INCONEL 600该合金因其强度和耐腐蚀性而广泛用于化学工业
  5. SEO和SEM的区别是什么?
  6. 阿里云如何选择带宽计费模式和带宽值
  7. grep 多条件并行满足_grep多个条件
  8. Office—OneNote快捷键操作
  9. 这难道是原子、比特and供应链的新内涵?京东如是说……
  10. 人脸关键点检测原理及实战