原创 Python学习总结之汉诺塔问题

发布时间:2019-08-19 14:33:20 浏览 3016 来源:博学谷资讯 作者:照照

    在学习Python的时候,大家难免会遇到汉诺塔问题,这是在学习其他编程语言也绕不过去的经典问题之一。本文就带大家了解什么是汉诺塔问题,并为大家解决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软件工具大全

相关推荐 更多

热门文章

  • 创建表并给某个字段添加数据的SQL语句怎么写
  • 如何使用连接更新表中某个字段数据?
  • MySQL数据库应用之如何将查询结果插入到其它表中?
  • 分组和聚合函数的组合怎么使用?代码怎么写?
  • 外键SQL语句的编写怎么用?
  • 数据库设计之三范式是什么?有什么作用?
  • 子查询的SQL语句怎么写?如何使用?
  • 连接查询自连接的SQL语句怎么写?
  • 连接查询右连接的SQL语句怎么写?
  • 连接查询左连接的SQL语句怎么写?
  • 查看更多

扫描二维码,了解更多信息

博学谷二维码