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中日期和时间格式化输出的方法小结
Mar 19 Python
python查看zip包中文件及大小的方法
Jul 09 Python
Python中关键字nonlocal和global的声明与解析
Mar 12 Python
遗传算法python版
Mar 19 Python
python面向对象多线程爬虫爬取搜狐页面的实例代码
May 31 Python
python3实现字符串的全排列的方法(无重复字符)
Jul 07 Python
Python将文本去空格并保存到txt文件中的实例
Jul 24 Python
Python3.4学习笔记之类型判断,异常处理,终止程序操作小结
Mar 01 Python
python文件读写代码实例
Oct 21 Python
Python字符串格式化输出代码实例
Nov 22 Python
浅谈Tensorflow 动态双向RNN的输出问题
Jan 20 Python
python-opencv 中值滤波{cv2.medianBlur(src, ksize)}的用法
Jun 05 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(4) php 函数 补充2
2010/02/15 PHP
PHP中include()与require()的区别说明
2010/03/10 PHP
php生成随机密码的几种方法
2011/01/17 PHP
如何在Ubuntu下启动Apache的Rewrite功能
2013/07/05 PHP
使用PHP破解防盗链图片的一个简单方法
2014/06/07 PHP
php中file_get_content 和curl以及fopen 效率分析
2014/09/19 PHP
php开启与关闭错误提示适用于没有修改php.ini的权限
2014/10/16 PHP
PHP中使用正则表达式提取中文实现笔记
2015/01/20 PHP
jquery imgareaselect 使用利用js与程序结合实现图片剪切
2009/07/30 Javascript
jQuery实现列表自动循环滚动鼠标悬停时停止滚动
2013/09/06 Javascript
教你如何在 Javascript 文件里使用 .Net MVC Razor 语法
2014/07/23 Javascript
以jQuery中$.Deferred对象为例讲解promise对象是如何处理异步问题
2015/11/13 Javascript
原生js页面滚动延迟加载图片
2015/12/20 Javascript
JavaScript实现点击单元格改变背景色的方法
2016/02/12 Javascript
js中window.open的参数及注意注意事项
2016/07/06 Javascript
Angular 2父子组件数据传递之局部变量获取子组件其他成员
2017/07/04 Javascript
微信小程序 跳转传递数据的实例
2017/07/06 Javascript
用Axios Element实现全局的请求loading的方法
2018/03/15 Javascript
NodeJs 模仿SIP话机注册的方法
2019/06/21 NodeJs
VueCli生产环境打包部署跨域失败的解决
2020/11/13 Javascript
详解Vue的mixin策略
2020/11/19 Vue.js
给Python初学者的一些编程技巧
2015/04/03 Python
对python中执行DOS命令的3种方法总结
2018/05/12 Python
python 筛选数据集中列中value长度大于20的数据集方法
2018/06/14 Python
python print输出延时,让其立刻输出的方法
2019/01/07 Python
Django中URL的参数传递的实现
2019/08/04 Python
python实现邮件发送功能
2019/08/10 Python
Python Pandas对缺失值的处理方法
2019/09/27 Python
tensorflow 分类损失函数使用小记
2020/02/18 Python
Django中的模型类设计及展示示例详解
2020/05/29 Python
Django Admin 上传文件到七牛云的示例代码
2020/06/20 Python
捷克浴室和厨房设备购物网站:SIKO
2018/08/11 全球购物
大学生自我鉴定
2013/12/16 职场文书
毕业生自荐书
2014/02/03 职场文书
2019年国庆祝福语(70句)
2019/09/19 职场文书
如何通过简单的代码描述Angular父组件、子组件传值
2022/04/07 Javascript