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使用htpasswd实现基本认证授权的例子
Jun 10 Python
Python读取图片EXIF信息类库介绍和使用实例
Jul 10 Python
跟老齐学Python之类的细节
Oct 13 Python
Python中使用glob和rmtree删除目录子目录及所有文件的例子
Nov 21 Python
Python实现以时间换空间的缓存替换算法
Feb 19 Python
bat和python批量重命名文件的实现代码
May 19 Python
Python 正则表达式入门(中级篇)
Dec 07 Python
Python面向对象class类属性及子类用法分析
Feb 02 Python
python通过Windows下远程控制Linux系统
Jun 20 Python
Python中logging.NullHandler 的使用教程
Nov 29 Python
python爬虫简单的添加代理进行访问的实现代码
Apr 04 Python
2020最新pycharm汉化安装(python工程狮亲测有效)
Apr 26 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
yii2中dropDownList实现二级和三级联动写法
2017/04/26 PHP
TP5框架简单登录功能实现方法示例
2019/10/31 PHP
PHP 命名空间和自动加载原理与用法实例分析
2020/04/29 PHP
基于Jquery的将DropDownlist的选中值赋给label的实现代码
2011/05/06 Javascript
深入理解JavaScript系列(14) 作用域链介绍(Scope Chain)
2012/04/12 Javascript
javascript检测浏览器的缩放状态实现代码
2014/09/28 Javascript
JavaScript转换二进制编码为ASCII码的方法
2015/04/16 Javascript
简单谈谈javascript中this的隐式绑定
2016/02/22 Javascript
浅谈javascript控制HTML5的全屏操控,浏览器兼容的问题
2016/10/10 Javascript
浅谈jQuery中的eq()与DOM中element.[]的区别
2016/10/28 Javascript
详解jQuery事件
2017/01/13 Javascript
js 函数式编程学习笔记
2017/03/25 Javascript
原生JS实现圆环拖拽效果
2017/04/07 Javascript
Ionic3 UI组件之autocomplete详解
2017/06/08 Javascript
Vue之Watcher源码解析(1)
2017/07/19 Javascript
[57:53]Secret vs Pain 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
连接pandas以及数组转pandas的方法
2019/06/28 Python
pytorch 共享参数的示例
2019/08/17 Python
Python中函数的返回值示例浅析
2019/08/28 Python
python实现图像拼接
2020/03/05 Python
Jupyter notebook 启动闪退问题的解决
2020/04/13 Python
Ubuntu16安装Python3.9的实现步骤
2020/12/15 Python
HTML5+CSS3实例 :canvas 模拟实现电子彩票刮刮乐代码
2016/12/30 HTML / CSS
详解基于 Canvas 手撸一个六边形能力图
2019/09/02 HTML / CSS
Html5百叶窗效果的示例代码
2017/12/11 HTML / CSS
美国生鲜及杂货电商:FreshDirect
2018/01/29 全球购物
Linux如何为某个操作添加别名
2013/03/01 面试题
90后毕业生的求职信范文
2013/09/21 职场文书
客服工作职责
2013/12/11 职场文书
医学专业自荐信
2014/06/14 职场文书
2014年人事科工作总结
2014/11/19 职场文书
介绍信怎么写
2015/01/30 职场文书
拾金不昧通报表扬范文
2015/05/05 职场文书
升学宴家长答谢词
2015/09/29 职场文书
Python虚拟环境virtualenv是如何使用的
2021/06/20 Python
浅谈自定义校验注解ConstraintValidator
2021/06/30 Java/Android