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 相关文章推荐
Python多线程编程(八):使用Event实现线程间通信
Apr 05 Python
Python中pygame安装方法图文详解
Nov 11 Python
Python实现判断一行代码是否为注释的方法
May 23 Python
详解python实现识别手写MNIST数字集的程序
Aug 03 Python
Python打包方法Pyinstaller的使用
Oct 09 Python
Centos部署django服务nginx+uwsgi的方法
Jan 02 Python
Python实现求两个数组交集的方法示例
Feb 23 Python
如何通过雪花算法用Python实现一个简单的发号器
Jul 03 Python
Python统计分析模块statistics用法示例
Sep 06 Python
python如何实现不用装饰器实现登陆器小程序
Dec 14 Python
详解python中groupby函数通俗易懂
May 14 Python
Python 爬取淘宝商品信息栏目的实现
Feb 06 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
基于mysql的bbs设计(四)
2006/10/09 PHP
PHP 字符串 小常识
2009/06/05 PHP
PHP随机生成信用卡卡号的方法
2015/03/23 PHP
PHP5.5新特性之yield理解与用法实例分析
2019/01/11 PHP
Yii2.0框架模型多表关联查询示例
2019/07/18 PHP
js获取控件位置以及不同浏览器中的差别介绍
2013/08/08 Javascript
js中for in的用法示例解析
2013/12/25 Javascript
JS调用页面表格导出excel示例代码
2014/03/18 Javascript
JS倒计时代码汇总
2014/11/25 Javascript
js+html5实现canvas绘制圆形图案的方法
2015/06/05 Javascript
JS弹出层遮罩,隐藏背景页面滚动条细节优化分析
2016/04/29 Javascript
Dojo获取下拉框的文本和值实例代码
2016/05/27 Javascript
jquery操作select常见方法大全【7种情况】
2019/05/28 jQuery
webpack 最佳配置指北(推荐)
2020/01/07 Javascript
解决vue单页面多个组件嵌套监听浏览器窗口变化问题
2020/07/30 Javascript
解决vue使用vant下拉框van-dropdown-item 绑定title值不变问题
2020/08/05 Javascript
JavaScript原生数组函数实例汇总
2020/10/14 Javascript
vue-resource 拦截器interceptors使用详解
2021/01/18 Vue.js
用Python进行行为驱动开发的入门教程
2015/04/23 Python
jupyter notebook 添加kernel permission denied的操作
2020/04/21 Python
keras的siamese(孪生网络)实现案例
2020/06/12 Python
Python操作dict时避免出现KeyError的几种解决方法
2020/09/20 Python
python中random模块详解
2021/03/01 Python
python 中 .py文件 转 .pyd文件的操作
2021/03/04 Python
简单的HTML5初步入门教程
2015/09/29 HTML / CSS
MyBag中文网:英国著名的时尚包袋电商零售网站
2020/07/31 全球购物
体育老师的教学自我评价分享
2013/11/19 职场文书
培训讲师邀请函
2014/01/10 职场文书
公司拓展活动方案
2014/02/13 职场文书
班级读书活动总结
2014/06/30 职场文书
领导参观欢迎词
2015/01/26 职场文书
起诉书范文
2015/05/20 职场文书
国情备忘录观后感
2015/06/04 职场文书
Python破解极验滑动验证码详细步骤
2021/05/21 Python
Golang表示枚举类型的详细讲解
2021/09/04 Golang
Win11怎么进入安全模式?Windows 11进入安全模式的方法
2021/11/21 数码科技