感谢漂流的云的图解汉诺塔问题(递归求解)
(1)先从最简单的模型开始,假如A柱有2个盘,我们的任务是把这两个盘按照规则(小叠在大上)移到C柱。操作步骤如下所示:

(2)现在把原始时A柱盘子数增加到100,那步骤不言而喻变得很复杂,但是我们可以通过一种方法把复杂的问题简单化:

可能此时你会觉得什么!怎么可以直接把这一大块就这样移过来!我们可以把那一大块红色再次看为2一大块,让2成为最大的蓝色3~100成为红色

(3)以此类推到最顶部的10099的移动,也就是我们一开始,拿到一个汉诺塔会去做的一件事:

在完成第一个回合,及99100成功脱离黑色块,也就是上图的最后一步,我们再次把99100合体为新的红色块,与新的蓝色块——98开始新一回合的移动。以此类推下去,就最终完成全部盘子从A柱到另外的柱子。
(4)我们再次回到第一次只有两个对象的那张图,不过这一次,我们假设在A柱上我们有n个盘子,这时候,还是的移动——1n-1

我们把移动步骤都列举下来:
n-1 from A --> B
1from A --> C
n-1 from B --> C
(5)最后,我们通过创建一个move( )函数,来实现这一功能:

def move(n, a, b, c):if n == 1:print(a, '-->', c)else:move(n-1, a, c, b)move(1, a, b, c)move(n-1, b, a, c)
a = input('请输入A柱盘子的个数:')
num = int(a)
print('把',num,'个盘子全部移到C柱子的顺序为:')
move(num, 'A', 'B', 'C')

所谓递归函数,就是一个函数在内部调用其自身本身的函数。以上的move( )函数就是一个很经典的递归函数,在循环语句的else部分,通过不断地调用自己,完成移动。move( )函数中,总共有4个参数:n, a, b, c。当n==1时,由第2位参数 --> 第4位参数。因此else部分的函数其实表达的是a --> b; a --> c; b --> c,及是(4)中模型的移动步骤。

图解汉诺塔,用Python实现经典递归相关推荐

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

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

  2. 汉诺塔实践python_汉诺塔的python 动画演示

    1.简介 古代有一座汉诺塔,塔内有3个座A.B.C,A座上有n个盘子,盘子大小不等,大的在下,小的在上,如图所示.有一个和尚想把这n个盘子从A座移到C座,但每次只能移动一个盘子,并且自移动过程中,3个 ...

  3. 图解汉诺塔(满屏幕都是图)

    图解汉诺塔(满屏幕都是图) 汉诺塔问题 步骤1: 步骤2 步骤3: 技术总结 和很多人一样,我刚刚接触汉诺塔的时候,可能说是头晕目眩,立马放弃. 但如果用图形表示感觉会好很多. 以下是我的学习思路: ...

  4. 汉诺塔求次数(用递归)

    Copyright(c)2013,烟台大学计算机学院学生 *All rights reserved. *文件名称:汉诺塔求次数(用递归) *作者:杨飞 *完成日期:2013年11月25日 *版本号:v ...

  5. 个盘子的汉诺塔需要移动几步_图解汉诺塔问题( Java 递归实现)

    汉诺塔简介 最近在看数据结构和算法,遇到了一个非常有意思的问题--汉诺塔问题. 先看下百度百科是怎么定义汉诺塔的规则的: 汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具.大梵天创造世界的时候 ...

  6. 汉诺塔游戏规律,让汉诺塔沦为体力劳动!(后附汉诺塔解法Python源码)

    记住这个规律,以后玩汉诺塔基本上就是体力劳动了. 规律: 先小后大,单左双右,循环. 设3个柱子分别是甲,乙,丙,把3根柱子看成一个循环,也就是说,甲的右边是乙,乙的右边是丙,而丙的右边则回到甲,同理 ...

  7. 算法第一期:汉诺塔问题(python通俗易懂版)

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

  8. 汉诺塔详解过程和递归思想及举例(python代码)

    省略问题描述- 但我们知道64个盘子的移动次数是18 446 744 073 709 551 615这是一个天文数字 解决办法: 我们最终解决的问题就是将a柱子原来由大到小从下到上排好序的圆盘通过b柱 ...

  9. 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层个 ...

最新文章

  1. unity中app实现拖拽_10分钟让你实现在APP中对网络状态变化进行全局提示
  2. sql server2008用ip远程连接
  3. javascript里的prototype
  4. JavaScript异步
  5. 动手学pytorch之通俗易懂何为卷积-深度AI科普团队
  6. 今日恐慌与贪婪指数为54 等级由贪婪转为中立
  7. VMware快照的工作原理
  8. 第六章 第一个Linux驱动程序:统计单词个数
  9. hmcl支持java7吗_求助。用HMCL下载1.7.10的问题
  10. pdf 加深 扫描件_扫描文字字体如何加深 pdf扫描件字体加深
  11. 华为安装gsm框架_华为手机怎么安装 GMS 框架和谷歌应用?
  12. ps怎么对比原图快捷键_用Photoshop调出图片冷暖色对比
  13. linux系统如何修复分区工具,如何恢復LINUX的硬盘分区表
  14. 怎样才能叫高级程序员?
  15. 成功解决pyinstaller打包时报错:lib not found的问题
  16. python networkx 导入CSV文件画关系网络图
  17. 古学今用——不要那么直白了
  18. 三种不同的interrupt方法区别调用
  19. ISO、光圈、曝光、焦距
  20. JAVA-制作飞机大战遇到的问题

热门文章

  1. 十、我们应当怎样做需求分析:业务流程分析(上)
  2. arm_GPIO_简单编程例题
  3. 初创期企业运营必备手册-工具包-商业计划书路演PPT模版精选
  4. 芬兰气象研究所和维萨拉科学测量仪器将用于毅力号火星探测
  5. Linux下Brit 导出pdf,word等文件的时候echarts的X轴或者Title乱码问题
  6. Flex离线地图和在线谷歌地图实现完整版
  7. 树------最优二叉树
  8. Android: R cannot be resolved to a variable
  9. 关于无穷小微积分的教学辅导书
  10. 十八、彻底卸载node.js