- 在线客服 
  - 扫描二维码 
 下载博学谷APP
  - 扫描二维码 
 关注博学谷微信公众号
在学习Python的时候,大家难免会遇到汉诺塔问题,这是在学习其他编程语言也绕不过去的经典问题之一。本文就带大家了解什么是汉诺塔问题,并为大家解决Python中的此类问题。感兴趣的小伙伴就赶紧看下去吧!

1、什么是汉诺塔问题?
汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。
2、汉诺塔问题在Python中可以抽象如下:
(1)3根圆柱A,B,C,其中A上面串了n个圆盘。
(2)这些圆盘从上到下是按从小到大顺序排列的,大的圆盘任何时刻不得位于小的圆盘上面。
(3)每次移动一个圆盘,最终实现将所有圆盘移动到C上。
3、利用Python语言接近自然语言的特性,开发者可以更容易的将递归算法翻译成程序语句,需要的代码量很小。汉诺塔问题的解决步骤用语言描述很简单,仅三步:
A,B,C三个圆柱,分别为初始位,过渡位,目标位,设A柱为初始位,C位为最终目标位
(1)将最上面的n-1个圆盘从初始位移动到过渡位
(2)将初始位的最底下的一个圆盘移动到目标位
(3)将过渡位的n-1个圆盘移动到目标位
对于递归算法中的嵌套函数f(n-1)来说,其初始位,过渡位,目标位发生了变化
具体代码如下:
def move(n,a,b,c): #n为圆盘数,a代表初始位圆柱,b代表过渡位圆柱,c代表目标位圆柱
if n==1:
print(a,'-->',c)
else:
move(n-1,a,c,b) #将初始位的n-1个圆盘移动到过渡位,此时初始位为a,上一级函数的过渡位b即为本级的目标位,上级的目标位c为本级的过渡位
print(a,'-->',c)
move(n-1,b,a,c) #将过渡位的n-1个圆盘移动到目标位,此时初始位为b,上一级函数的目标位c即为本级的目标位,上级的初始位a为本级的过渡位
— 申请免费试学名额 —
    在职想转行提升,担心学不会?根据个人情况规划学习路线,闯关式自适应学习模式保证学习效果
    
    讲师一对一辅导,在线答疑解惑,指导就业!
  
相关推荐 更多
  - 零基础怎么学Python?Python学习指南
 - 零基础怎么学Python?本文将手把手教大家如何入门Python,从用什么样的电脑这样的硬件准备到小白入门须知的理论基础,一篇文章就解决大家对学习的疑问,提供最详细的Python学习指南。 - 8292 - 2019-07-31 16:01:45 
  - 只学Python能找到工作吗?还需要学习什么技能?
 - 只学Python能找到工作吗?当然可以,像是爬虫抓取、测试都是可以从事的的方向。还需要学习什么技能?想要有广阔的发展空间,最好还是结合web开发、云计算、人工智能、自动化运维一起学,只有学会利用Python,把它作为一个语言工具才能最大发挥它的价值。下面我们来看看Python适合与哪些技能一起学。 - 7474 - 2019-09-27 21:45:10 
  - Python中常用图像处理工具
 - 图像处理技术是互联网开发一个非常重要的环节。图像处理中的常见任务包括显示图像,基本操作(如剪切、翻转、旋转等),图像分类和特征提取、图像恢复、和图像识别。尤其在人工智能技术日臻成熟的现在,图像处理技术成为Python开发工程师必备的技能之一。Python编程语言自身提供许多先进的图像处理工具,使得Python成为图像处理任务的最佳选择。 - 5875 - 2019-10-28 18:53:24 
  - 如何利用pandas绘制可视化图表?
 - 众所周知,Pandas是基于Python平台的大数据分析与处理的利器,它可以把十分复杂的可视化过程,变得简单一点。本文将以2019年世界幸福指数的数据为例,为大家详细展示如何利用pandas绘制可视化图表。相信经过本次手把手教学,大家可以举一反三掌握绘制可视化图表的能力。感兴趣的朋友赶紧来看详细的步骤解析吧! - 6734 - 2020-03-04 18:47:04 
  - CSS 选择器的种类有哪些?怎么用?
 - CSS 选择器的种类有标签选择器、类选择器、层级选择器(后代选择器)、id选择器、组选择器、伪类选择器,作为程序员应该具备根据不同的场景选择适合的CSS选择器。 - 3188 - 2021-12-09 15:39:55 
 
  
  
 