python实现汉诺塔方法汇总


Posted in Python onJuly 25, 2016

学习python遇到的第一个问题:汉诺塔问题的实现。首先是不知道什么是汉诺塔问题,然后是不知道怎么实现。于是百度了下,结果如下:

汉诺塔:汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘

方法一:

def move(n,a,b,c)    # n=2
  if n==1 :      # 跳过
    print a,'-->',c
    return None
  move(n-1,a,c,b)  # n=2,执行n-1后,move(n-1,a,c,b)->move(1,a,c,b),跳到if处,执行print:a-->b
  print a,'-->',c  # 执行print,这里的a和c是指定义的函数的参数a和c,打印结果是:a-->c
  move(n-1,b,a,c)  # n=1 ,执行n-1后,跳到if处,执行print,此时,a=b,c=c,结果是:b-->c
move(2,'a','b','c')

方法二:

def printMove(fr,to):
  print 'move from ' + str(fr) + ' to ' + str(to)
 
def Towers(n,fr,to,spare):
  if n == 1:
    printMove(fr,to)
  else:
    Towers(n-1,fr,spare,to)
    Towers(1,fr,to,spare)
    Towers(n-1,spare,to,fr)

方法三:

def hanoi(n,x,y,z):
if n==1:
print(x,'-->',z)
else:
hanoi(n-1,x,z,y)#将前n-1个盘子从x移动到y上
hanoi(1,x,y,z)#将最底下的最后一个盘子从x移动到z上
hanoi(n-1,y,x,z)#将y上的n-1个盘子移动到z上
n=int(input('请输入汉诺塔的层数:'))
hanoi(n,'x','y','z')

总结下:

# 汉诺塔思想笔记
# 认识汉诺塔的目标:把A柱子上的N个盘子移动到C柱子
# 递归的思想就是把这个目标分解成三个子目标
# 子目标1:将前n-1个盘子从a移动到b上
# 子目标2:将最底下的最后一个盘子从a移动到c上
# 子目标3:将b上的n-1个盘子移动到c上
# 然后每个子目标又是一次独立的汉诺塔游戏,也就可以继续分解目标直到N为1

Python 相关文章推荐
wxPython 入门教程
Oct 07 Python
编写Python脚本来获取Google搜索结果的示例
May 04 Python
python anaconda 安装 环境变量 升级 以及特殊库安装的方法
Jun 21 Python
Ubuntu下使用Python实现游戏制作中的切分图片功能
Mar 30 Python
快速解决安装python没有scripts文件夹的问题
Apr 03 Python
django 解决manage.py migrate无效的问题
May 27 Python
Python中交换两个元素的实现方法
Jun 29 Python
30秒学会30个超实用Python代码片段【收藏版】
Oct 15 Python
Python生态圈图像格式转换问题(推荐)
Dec 02 Python
pyqt5中动画的使用详解
Apr 01 Python
Pyinstaller 打包发布经验总结
Jun 02 Python
python如何正确使用yield
May 21 Python
python魔法方法-属性访问控制详解
Jul 25 #Python
python魔法方法-属性转换和类的表示详解
Jul 22 #Python
wxpython中自定义事件的实现与使用方法分析
Jul 21 #Python
wxpython中Textctrl回车事件无效的解决方法
Jul 21 #Python
Python实现Sqlite将字段当做索引进行查询的方法
Jul 21 #Python
python装饰器初探(推荐)
Jul 21 #Python
python魔法方法-自定义序列详解
Jul 21 #Python
You might like
玛琪朵 Macchiato
2021/03/03 咖啡文化
PHP脚本中include文件出错解决方法
2008/11/20 PHP
PHP 函数学习简单小结
2010/07/08 PHP
如何解决CI框架的Disallowed Key Characters错误提示
2013/07/05 PHP
PHP获取文件夹内文件数的方法
2015/03/12 PHP
PHP实现仿Google分页效果的分页函数
2015/07/29 PHP
Zend Framework框架教程之Zend_Db_Table_Rowset用法实例分析
2016/03/21 PHP
PHP程序中的文件锁、互斥锁、读写锁使用技巧解析
2016/03/21 PHP
tp5(thinkPHP5)框架实现多数据库查询的方法
2019/01/10 PHP
jquery判断checkbox(复选框)是否被选中的代码
2010/10/20 Javascript
JavaScript中读取和保存文件实例
2014/05/08 Javascript
javascript轻量级模板引擎juicer使用指南
2014/06/22 Javascript
jquery渐隐渐显的图片幻灯闪烁切换实现方法
2015/02/26 Javascript
jQuery如何获取动态添加的元素
2016/06/24 Javascript
学习Angular中作用域需要注意的坑
2016/08/17 Javascript
Javascript动画效果(4)
2016/10/11 Javascript
js select下拉联动 更具级联性!
2020/04/17 Javascript
jQuery插件HighCharts实现气泡图效果示例【附demo源码】
2017/03/13 Javascript
jQuery复合事件结合toggle()方法的用法示例
2017/06/10 jQuery
JavaScript数组,JSON对象实现动态添加、修改、删除功能示例
2018/05/26 Javascript
微信小程序iBeacon测距及稳定程序的实现解析
2019/07/31 Javascript
js实现左右轮播图
2020/01/09 Javascript
vuex实现购物车的增加减少移除
2020/06/28 Javascript
vue 动态设置img的src地址无效,npm run build 后找不到文件的解决
2020/07/26 Javascript
Python 的 Socket 编程
2015/03/24 Python
详解Python map函数及Python map()函数的用法
2017/11/16 Python
python使用itchat实现手机控制电脑
2018/02/22 Python
浅谈Python 递归算法指归
2019/08/22 Python
python生成大写32位uuid代码
2020/03/03 Python
简单介绍一下pyinstaller打包以及安全性的实现
2020/06/02 Python
HTML5表单验证特性(知识点小结)
2020/03/10 HTML / CSS
C++:局部变量能否和全局变量重名
2014/03/03 面试题
CAD制图设计师自荐信
2014/01/29 职场文书
项目合作意向书范本
2014/04/01 职场文书
上党课的心得体会
2014/09/02 职场文书
MySQL数据管理操作示例讲解
2022/12/24 MySQL