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 20 Python
10种检测Python程序运行时间、CPU和内存占用的方法
Apr 01 Python
python生成器,可迭代对象,迭代器区别和联系
Feb 04 Python
Python检测网络延迟的代码
May 15 Python
Python中extend和append的区别讲解
Jan 24 Python
django2.0扩展用户字段示例
Feb 13 Python
python调用pyaudio使用麦克风录制wav声音文件的教程
Jun 26 Python
python实现车牌识别的示例代码
Aug 05 Python
Python类中方法getitem和getattr详解
Aug 30 Python
python 的numpy库中的mean()函数用法介绍
Mar 03 Python
Keras官方中文文档:性能评估Metrices详解
Jun 15 Python
python利用后缀表达式实现计算器功能
Feb 22 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/10/09 PHP
php输出表格的实现代码(修正版)
2010/12/29 PHP
php站内搜索并高亮显示关键字的实现代码
2011/12/29 PHP
学习php设计模式 php实现建造者模式
2015/12/07 PHP
项目中应用Redis+Php的场景
2016/05/22 PHP
php验证码生成器
2017/05/24 PHP
一个非常实用的php文件上传类
2017/07/04 PHP
php获取微信共享收货地址的方法
2017/12/21 PHP
PHP7内核CGI与FastCGI详解
2019/04/14 PHP
疯掉了,尽然有js写的操作系统
2007/04/23 Javascript
javascript eval函数深入认识
2009/02/21 Javascript
jquery实现简单的拖拽效果实例兼容所有主流浏览器(优化篇)
2013/06/28 Javascript
原生js与jQuery实现简单的tab切换特效对比
2015/07/30 Javascript
理解jquery事件冒泡
2016/01/03 Javascript
Javascript日期格式化format函数的使用方法
2016/08/30 Javascript
require.js与bootstrap结合实现简单的页面登录和页面跳转功能
2017/05/12 Javascript
通过jquery获取上传文件名称、类型和大小的实现代码
2018/04/19 jQuery
详解jQuery获取特殊属性的值以及设置内容
2018/11/14 jQuery
JS栈stack类的实现与使用方法示例
2019/01/31 Javascript
jQuery 常用特效实例小结【显示与隐藏、淡入淡出、滑动、动画等】
2020/05/19 jQuery
微信小程序仿抖音视频之整屏上下切换功能的实现代码
2020/05/24 Javascript
vue.js实现h5机器人聊天(测试版)
2020/07/16 Javascript
详解webpack的文件监听实现(热更新)
2020/09/11 Javascript
[45:59]EG vs OG 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/18 DOTA
[04:29]【TI9采访】OG.N0tail在胜者组决赛后接受采访
2019/08/25 DOTA
详解Python之数据序列化(json、pickle、shelve)
2017/03/30 Python
python导出chrome书签到markdown文件的实例代码
2017/12/27 Python
使用Python快乐学数学Github万星神器Manim简介
2019/08/07 Python
基于nexus3配置Python仓库过程详解
2020/06/15 Python
周仰杰(JIMMY CHOO)英国官方网站:闻名世界的鞋子品牌
2018/10/28 全球购物
super()与this()的区别
2016/01/17 面试题
自考生自我鉴定范文
2013/10/01 职场文书
医德医风自我评价
2014/09/19 职场文书
会议接待欢迎词范文
2015/01/26 职场文书
Javascript中的解构赋值语法详解
2021/04/02 Javascript
解决python3安装pandas出错的问题
2021/05/20 Python