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 相关文章推荐
Python3中的真除和Floor除法用法分析
Mar 16 Python
python flask实现分页效果
Jun 27 Python
使用pandas对矢量化数据进行替换处理的方法
Apr 11 Python
python 用lambda函数替换for循环的方法
Jun 09 Python
Python3+OpenCV2实现图像的几何变换(平移、镜像、缩放、旋转、仿射)
May 13 Python
如何通过python画loss曲线的方法
Jun 26 Python
Flask和pyecharts实现动态数据可视化
Feb 26 Python
Python3将ipa包中的文件按大小排序
Apr 17 Python
python使用for...else跳出双层嵌套循环的方法实例
May 17 Python
Python绘图之柱形图绘制详解
Jul 28 Python
python实现简单猜单词游戏
Dec 24 Python
Python实现自动玩连连看的脚本分享
Apr 04 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
PHP使用mysqldump命令导出数据库
2015/04/14 PHP
PHP上传图片、删除图片简单实例
2016/11/12 PHP
javascript中注册和移除事件的4种方式
2013/03/20 Javascript
利用js实现前台动态添加文本框,后台获取文本框内容(示例代码)
2013/11/25 Javascript
JS对象与json字符串格式转换实例
2014/10/28 Javascript
JavaScript显示当前文档最后修改日期的方法
2015/03/19 Javascript
javascript使用shift+click实现选择和反选checkbox的方法
2015/05/04 Javascript
Javascript中prototype属性实现给内置对象添加新的方法
2015/05/14 Javascript
浅谈javascript的call()、apply()、bind()的用法
2016/02/21 Javascript
用jQuery的AJax实现异步访问、异步加载
2016/11/02 Javascript
使用jquery实现的循环连续可停顿滚动实例
2016/11/23 Javascript
微信小程序 动态的设置图片的高度和宽度详解及实例代码
2017/02/24 Javascript
Angular使用$http.jsonp发送跨站请求的方法
2017/03/16 Javascript
jQuery实现的粘性滚动导航栏效果实例【附源码下载】
2017/10/19 jQuery
详解小程序如何避免多次点击,重复触发事件
2019/04/08 Javascript
微信小程序按钮点击动画效果的实现
2019/09/04 Javascript
微信小程序实现上传多个文件 超过10个
2020/03/30 Javascript
深度解读vue-resize的具体用法
2020/07/08 Javascript
[03:51]吞吞映像 每周精彩击杀top10第二弹
2014/06/25 DOTA
从零学python系列之新版本导入httplib模块报ImportError解决方案
2014/05/23 Python
Python获取Linux系统下的本机IP地址代码分享
2014/11/07 Python
python中map()与zip()操作方法
2016/02/27 Python
利用Python爬虫给孩子起个好名字
2017/02/14 Python
Python常见字典内建函数用法示例
2018/05/14 Python
python实现扫描局域网指定网段ip的方法
2019/04/16 Python
keras实现基于孪生网络的图片相似度计算方式
2020/06/11 Python
python如何实现递归转非递归
2021/02/25 Python
基于css3 animate制作绚丽的动画效果
2015/11/24 HTML / CSS
记一次高分屏下canvas模糊问题
2020/02/17 HTML / CSS
蹦床仓库:Trampoline Warehouse
2018/12/06 全球购物
租赁协议书范本
2014/04/22 职场文书
乡镇镇长个人整改措施
2014/10/01 职场文书
2014年招商引资工作总结
2014/11/22 职场文书
感谢信范文大全
2015/01/23 职场文书
安全伴我行主题班会
2015/08/13 职场文书
Python基础之hashlib模块详解
2021/05/06 Python