在线客服
扫描二维码
下载博学谷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有Web开发、数据科学和脚本三大应用。无论对于零基础小白,还是已经工作想要提升自己的在职人员,学好这些内容都会对职业发展有着重要作用。下面小编将详细为大家分析,Python学好了能从事什么岗位的工作。
9729
2019-08-27 10:26:20
Python中with语句的用法介绍
Python中的with语句,在事前需要设置和事后需要清理的场景下,能够提供非常方便的处理方式。因此,本文就来和大家介绍一下with语句的用法,具体内容包括with语句简介、With语句的基本语法格式、参数说明、with语句的工作原理和示例代码,希望能够帮助到Python的学习者。
5906
2019-11-04 17:51:38
为什么越来越多的人学Python?
为什么越来越多的人开始学习Python?在互联网技术以及市场的推动下,人工智能以及数据科学成为各大企业抢夺的未来市场,而Python编程语言在两个热门方向上有非常广泛的应用。越来越多的同学开始学习Python,不仅仅是因为市场趋势发展需要,同时与Python的语言特点、应用范围密切相关的。
4997
2019-11-28 18:23:52
Python培训班哪家好?课程亮点有哪些?
因为Python在各个领域的广泛应用,再加上它新手友好的独特语法,使Python被越来越多的人学习。为了满足日益增长的Python学习需求,博学谷特地为零基础小白开设了Python培训班。如果大家想知道Python培训班哪家好?不妨来博学谷在线体验一下免费的试听课程,下面我们来看看课程的亮点有哪些。
5515
2020-06-23 14:21:45
作为996社畜,如何自学Python?
作为996社畜,应该如何自学Python?确定好目标,选择合适的内容,制定计划,多多练习,多多分享,制定最适合自己的计划,然后按部就班的实施起来。如果你能坚持这么做,一定可以学好Python。
3843
2021-07-20 16:03:47