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中IPYTHON入门实例
May 11 Python
Python使用urllib2模块实现断点续传下载的方法
Jun 17 Python
python变量不能以数字打头详解
Jul 06 Python
Python函数基础实例详解【函数嵌套,命名空间,函数对象,闭包函数等】
Mar 30 Python
Python符号计算之实现函数极限的方法
Jul 15 Python
python selenium 查找隐藏元素 自动播放视频功能
Jul 24 Python
python3应用windows api对后台程序窗口及桌面截图并保存的方法
Aug 27 Python
解决Keras 与 Tensorflow 版本之间的兼容性问题
Feb 07 Python
Python正则表达式学习小例子
Mar 03 Python
基于python实现获取网页图片过程解析
May 11 Python
pycharm 配置svn的图文教程(手把手教你)
Jan 15 Python
进行数据处理的6个 Python 代码块分享
Apr 06 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实现截取中文字符串不出现?号的解决方法
2016/12/29 PHP
PhpStorm的使用教程(本地运行PHP+远程开发+快捷键)
2020/03/26 PHP
PHP实现随机发放扑克牌
2020/04/21 PHP
使用正则替换变量
2007/05/05 Javascript
子窗口、父窗口和Silverlight之间的相互调用
2010/08/16 Javascript
iframe父页面获取子页面参数的方法
2014/02/21 Javascript
jQuery仅用3行代码实现的显示与隐藏功能完整实例
2015/10/08 Javascript
JS跨域交互(jQuery+php)之jsonp使用心得
2016/07/01 Javascript
jQuery插件HighCharts实现的2D回归直线散点效果示例【附demo源码下载】
2017/03/09 Javascript
小程序tab页无法传递参数的方法
2018/08/03 Javascript
JS操作字符串转数字的常见方法示例
2019/10/29 Javascript
[53:10]Secret vs Pain 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
[29:16]完美世界DOTA2联赛决赛日 Inki vs LBZS 第三场 11.08
2020/11/10 DOTA
Python使用tablib生成excel文件的简单实现方法
2016/03/16 Python
详解python中的文件与目录操作
2017/07/11 Python
pycharm下打开、执行并调试scrapy爬虫程序的方法
2017/11/29 Python
python中的二维列表实例详解
2018/06/19 Python
如何在Python中实现goto语句的方法
2019/05/18 Python
python算法与数据结构之冒泡排序实例详解
2019/06/22 Python
python中的decimal类型转换实例详解
2019/06/26 Python
Python数学形态学实例分析
2019/09/06 Python
Python3实现飞机大战游戏
2020/04/24 Python
vscode写python时的代码错误提醒和自动格式化的方法
2020/05/07 Python
Django DRF认证组件流程实现原理详解
2020/08/17 Python
python 基于opencv实现图像增强
2020/12/23 Python
Python绘制数码晶体管日期
2021/02/19 Python
阿联酋航空丹麦官方网站:Emirates DK
2019/08/25 全球购物
Linux如何为某个操作添加别名
2015/02/05 面试题
中文专业毕业生自荐书范文
2014/01/04 职场文书
高三上学期学习自我评价
2014/04/23 职场文书
2014小学二年级班主任工作总结
2014/12/05 职场文书
小升初自荐信范文
2015/03/05 职场文书
校运会通讯稿
2015/07/18 职场文书
开学季:喜迎新生,迎新标语少不了
2019/11/07 职场文书
浅析python中特殊文件和特殊函数
2022/02/24 Python
python井字棋游戏实现人机对战
2022/04/28 Python