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 创建子进程模块subprocess详解
Apr 08 Python
Swift 3.0在集合类数据结构上的一些新变化总结
Jul 11 Python
Tornado协程在python2.7如何返回值(实现方法)
Jun 22 Python
python字典DICT类型合并详解
Aug 17 Python
关于反爬虫的一些简单总结
Dec 13 Python
Python单向链表和双向链表原理与用法实例详解
Aug 31 Python
numpy 对矩阵中Nan的处理:采用平均值的方法
Oct 30 Python
利用python提取wav文件的mfcc方法
Jan 09 Python
PyTorch之图像和Tensor填充的实例
Aug 18 Python
简单了解python元组tuple相关原理
Dec 02 Python
Python实现Kerberos用户的增删改查操作
Dec 14 Python
python字典进行运算原理及实例分享
Aug 02 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
Laravel框架中实现使用阿里云ACE缓存服务
2015/02/10 PHP
jquery不支持toggle()高(新)版本的问题解决
2016/09/24 PHP
使用Zookeeper分布式部署PHP应用程序
2019/03/15 PHP
从JavaScript的函数重名看其初始化方式
2007/03/08 Javascript
Gird组件 Part-3:范例RSSFeed Viewer
2007/03/10 Javascript
jQuery 1.3 和 Validation 验证插件1.5.1
2009/07/09 Javascript
jQuery 处理网页内容的实现代码
2010/02/15 Javascript
JavaScript编程开发中的五个实用小技巧
2010/07/22 Javascript
jQuery的实现原理的模拟代码 -1 核心部分
2010/08/01 Javascript
JS在textarea光标处插入文本的小例子
2013/03/22 Javascript
JS如何判断移动端访问设备并解析对应CSS
2013/11/27 Javascript
jquery的ajax跨域请求原理和示例
2014/05/08 Javascript
8个超实用的jQuery功能代码分享
2015/01/08 Javascript
javascript操作select元素实例分析
2015/03/27 Javascript
jQuery跨域问题解决方案
2015/08/03 Javascript
滚动条的监听与内容随着滚动条动态加载的实现
2017/02/08 Javascript
vue如何实现observer和watcher源码解析
2017/03/09 Javascript
图文讲解vue的v-if使用方法
2019/02/11 Javascript
微信小程序API—获取定位的详解
2019/04/30 Javascript
SublimeText 2编译python出错的解决方法(The system cannot find the file specified)
2013/11/27 Python
跟老齐学Python之折腾一下目录
2014/10/24 Python
Python的设计模式编程入门指南
2015/04/02 Python
python 输出上个月的月末日期实例
2018/04/11 Python
Python+OpenCV感兴趣区域ROI提取方法
2019/01/10 Python
Python设计模式之适配器模式原理与用法详解
2019/01/15 Python
python实现一行输入多个值和一行输出多个值的例子
2019/07/16 Python
Python模拟FTP文件服务器的操作方法
2020/02/18 Python
解决Keras 自定义层时遇到版本的问题
2020/06/16 Python
python 密码学示例——凯撒密码的实现
2020/09/21 Python
使用CSS3 制作一个material-design 风格登录界面实例
2016/12/12 HTML / CSS
AmazeUI中各种的导航式菜单与解决方法
2020/08/19 HTML / CSS
GIVENCHY纪梵希官方旗舰店:高定彩妆与贵族护肤品
2018/04/16 全球购物
什么是GWT的Entry Point
2013/08/16 面试题
医师定期考核实施方案
2014/05/07 职场文书
考生诚信考试承诺书
2014/05/23 职场文书
驾驶员安全责任书范本
2014/07/24 职场文书