在线客服
扫描二维码
下载博学谷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语言自身的优点吸引者初学者,然而不少从零开始时学Python的小伙伴难免在入门时产生迷茫感,这里小编整理了一份从零开始学Python必看入门指导。
7169
2019-07-22 15:10:47
什么是Python?Python有什么特性?
Python就是一种计算机编程语言。通过大量的代码组合实现计算机程序的各种功能。属于高级编程语言,相对于C语言、C++、Java等编程语言,具有简单易学易用等特性。这里我们需要特别的关注Python的特性。
6454
2020-05-15 17:33:42
参加Python培训有没有必要
众所周知,Python编程语言以其语法简单、容易上手、应用范围广泛受到广大求学者的钟爱,那真的可以通过自学Python达到就业的水平吗?市面上很多Python培训机构与课程有没有必要参加呢?
4360
2020-05-15 18:11:42
学Python编程好找工作吗?岗位方向多吗?
不少人找工作难同事企业招聘到合格的程序员也很难,找不到工作的大多数编程能力没有达到企业用人的最低标准。Python 职位比较多,但比Java、PHP 稍微少点,同等水平程序员Python岗位工资比PHP的高一些。
4007
2021-01-06 15:09:42
MySQL数据库的基本使用之数据库
MySQL数据库的基本使用之数据库,数据库是存储和管理数据的仓库,数据按照一定的格式进行存储。数据库起到存储和管理数据的作用。
2741
2022-01-10 14:06:11
热门文章
- 前端是什么
- 前端开发的工作职责
- 前端开发需要会什么?先掌握这三大核心关键技术
- 前端开发的工作方向有哪些?
- 简历加分-4步写出HR想要的简历
- 程序员如何突击面试?两大招带你拿下面试官
- 程序员面试技巧
- 架构师的厉害之处竟然是这……
- 架构师书籍推荐
- 懂了这些,才能成为架构师 查看更多
扫描二维码,了解更多信息
