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运行时间的几种方法
Jun 17 Python
Python错误提示:[Errno 24] Too many open files的分析与解决
Feb 16 Python
Python 中 Virtualenv 和 pip 的简单用法详解
Aug 18 Python
Python实现上下班抢个顺风单脚本
Feb 07 Python
Windows下的Jupyter Notebook 安装与自定义启动(图文详解)
Feb 21 Python
Python用61行代码实现图片像素化的示例代码
Dec 10 Python
Python实现时间序列可视化的方法
Aug 06 Python
Python使用selenium + headless chrome获取网页内容的方法示例
Oct 16 Python
在Tensorflow中实现梯度下降法更新参数值
Jan 23 Python
python:删除离群值操作(每一行为一类数据)
Jun 08 Python
Python使用Selenium实现淘宝抢单的流程分析
Jun 23 Python
Python学习工具jupyter notebook安装及用法解析
Oct 23 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中的串行化变量和序列化对象
2006/09/05 PHP
php页面消耗内存过大的处理办法
2013/03/18 PHP
详解WordPress中用于合成数组的wp_parse_args()函数
2015/12/18 PHP
PHP两种实现无级递归分类的方法
2017/03/02 PHP
jquery 简短几句代码实现给元素动态添加及获取提示信息
2011/09/01 Javascript
JQuery入门——事件切换之toggle()方法应用介绍
2013/02/05 Javascript
Jquery使用Firefox FireBug插件调试Ajax步骤讲解
2013/12/02 Javascript
php,js,css字符串截取的办法集锦
2014/09/26 Javascript
让javascript加载速度倍增的方法(解决JS加载速度慢的问题)
2014/12/12 Javascript
jQuery+CSS3实现3D立方体旋转效果
2015/11/10 Javascript
jQuery 判断是否包含在数组中Array[]的方法
2016/08/03 Javascript
javascript判断firebug是否开启的方法
2016/11/23 Javascript
js代码实现下拉菜单【推荐】
2016/12/15 Javascript
JavaScript之排序函数_动力节点Java学院整理
2017/06/30 Javascript
浅谈nodejs中的类定义和继承的套路
2017/07/26 NodeJs
JS实现的计数排序与基数排序算法示例
2017/12/04 Javascript
一步步教会你微信小程序的登录鉴权
2018/04/09 Javascript
vue如何获取自定义元素属性参数值的方法
2019/05/14 Javascript
JavaScript装饰者模式原理与用法实例详解
2020/03/09 Javascript
微信小程序:报错(in promise) MiniProgramError
2020/10/30 Javascript
零基础写python爬虫之urllib2中的两个重要概念:Openers和Handlers
2014/11/05 Python
Python 输出时去掉列表元组外面的方括号与圆括号的方法
2018/12/24 Python
Python调用Windows命令打印文件
2020/02/07 Python
python 用opencv实现霍夫线变换
2020/11/27 Python
python爬虫beautifulsoup解析html方法
2020/12/07 Python
关于HTML5你必须知道的28个新特性,新技巧以及新技术
2012/05/28 HTML / CSS
Holland & Barrett爱尔兰:英国领先的健康零售商
2019/03/31 全球购物
Carrs Silver官网:英国著名的银器品牌
2020/08/29 全球购物
这76道Java面试题及答案,祝你能成功通过面试
2016/04/16 面试题
幼师自荐信范文
2013/10/06 职场文书
清洁工岗位职责
2014/01/29 职场文书
商业项目策划方案
2014/06/05 职场文书
党的群众路线教育实践活动领导班子整改措施
2014/10/28 职场文书
python脚本框架webpy模板控制结构
2021/11/20 Python
Javascript中Microtask和Macrotask鲜为人知的知识点
2022/04/02 Javascript
Java数据结构之堆(优先队列)
2022/05/20 Java/Android