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模拟登录百度贴吧(百度贴吧登录)实例
Dec 18 Python
Python实现根据IP地址和子网掩码算出网段的方法
Jul 30 Python
Python中内建函数的简单用法说明
May 05 Python
python开发环境PyScripter中文乱码问题解决方案
Sep 11 Python
Python实现多线程HTTP下载器示例
Feb 11 Python
获取python文件扩展名和文件名方法
Feb 02 Python
Python实现中一次读取多个值的方法
Apr 22 Python
利用Pandas读取文件路径或文件名称包含中文的csv文件方法
Jul 04 Python
Django model反向关联名称的方法
Dec 15 Python
Python操作MongoDb数据库流程详解
Mar 05 Python
Django实现whoosh搜索引擎使用jieba分词
Apr 08 Python
Python BeautifulReport可视化报告代码实例
Apr 13 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 CURL模拟GET及POST函数代码
2010/04/25 PHP
提高PHP编程效率的方法
2013/11/07 PHP
php实现的DateDiff和DateAdd时间函数代码分享
2014/08/16 PHP
PHPExcel内存泄漏问题解决方法
2015/01/23 PHP
thinkphp5框架调用其它控制器方法 实现自定义跳转界面功能示例
2019/07/03 PHP
PHP之多条件混合筛选功能的实现方法
2019/10/09 PHP
Prototype 学习 工具函数学习($w,$F方法)
2009/07/12 Javascript
自写的一个jQuery圆角插件
2010/10/26 Javascript
使用firebug进行调试javascript的示例
2013/12/16 Javascript
JavaScript获取图片真实大小代码实例
2014/09/24 Javascript
js对象的复制继承实例
2015/01/10 Javascript
javascript HTML+CSS实现经典橙色导航菜单
2016/02/16 Javascript
JavaScript的MVVM库Vue.js入门学习笔记
2016/05/03 Javascript
Ionic + Angular.js实现验证码倒计时功能的方法
2017/06/12 Javascript
vue实现导航栏效果(选中状态刷新不消失)
2017/12/13 Javascript
vue-router项目实战总结篇
2018/02/11 Javascript
layer弹出层全屏及关闭方法
2018/08/17 Javascript
JS调用安卓手机摄像头扫描二维码
2018/10/16 Javascript
如何使用JavaScript检测空闲的浏览器选项卡
2020/05/28 Javascript
小程序实现背景音乐播放和暂停
2020/06/19 Javascript
JavaScript图像放大镜效果实现方法详解
2020/06/28 Javascript
nestjs返回给前端数据格式的封装实现
2021/02/22 Javascript
[12:36]《DOTA2》国服注册与激活指南全攻略
2013/04/28 DOTA
[03:01]2014DOTA2国际邀请赛 小组赛7月13日TOPPLAY
2014/07/14 DOTA
详解python中requirements.txt的一切
2017/03/03 Python
用python处理MS Word的实例讲解
2018/05/08 Python
python实现对列表中的元素进行倒序打印
2019/11/23 Python
python 求10个数的平均数实例
2019/12/16 Python
基于Python采集爬取微信公众号历史数据
2020/11/27 Python
浅谈HTML5 服务器推送事件(Server-sent Events)
2017/08/01 HTML / CSS
ktv中秋节活动方案
2014/01/30 职场文书
科研先进个人典型材料
2014/01/31 职场文书
大学毕业感言200字
2014/03/09 职场文书
先进集体申报材料
2014/12/25 职场文书
mysql 数据插入优化方法之concurrent_insert
2021/07/01 MySQL
Qt自定义Plot实现曲线绘制的详细过程
2021/11/02 Python