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中函数参数设置及使用的学习笔记
May 03 Python
go和python变量赋值遇到的一个问题
Aug 31 Python
python用户管理系统
Mar 13 Python
python pandas 对时间序列文件处理的实例
Jun 22 Python
Python使用Shelve保存对象方法总结
Jan 28 Python
python中对_init_的理解及实例解析
Oct 11 Python
Pytorch 实现focal_loss 多类别和二分类示例
Jan 14 Python
Python网络爬虫四大选择器用法原理总结
Jun 01 Python
python自定义函数def的应用详解
Jun 03 Python
Python基于wordcloud及jieba实现中国地图词云图
Jun 09 Python
Python读写压缩文件的方法
Jul 30 Python
python基于Kivy写一个图形桌面时钟程序
Jan 28 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
phpmyadmin中禁止外网使用的方法
2014/11/04 PHP
64位windows系统下安装Memcache缓存
2015/12/06 PHP
PHP中加速、缓存扩展的区别和作用详解(eAccelerator、memcached、xcache、APC )
2016/07/09 PHP
PHP递归删除多维数组中的某个值
2017/04/17 PHP
分享5个非常有用的Laravel Blade指令
2018/05/30 PHP
javascript web页面刷新的方法收集
2009/07/02 Javascript
Jquery 组合form元素为json格式,asp.net反序列化
2009/07/09 Javascript
Array栈方法和队列方法的特点说明
2014/01/24 Javascript
jquery选择器原理介绍($()使用方法)
2014/03/25 Javascript
JavaScript实现存储HTML字符串示例
2014/04/21 Javascript
利用a标签自动解析URL分析网址实例
2014/10/20 Javascript
jQuery实现悬浮在右上角的网页客服效果代码
2015/10/24 Javascript
javascript汉字拼音互转的简单实例
2016/10/09 Javascript
浅谈javascript中执行环境(作用域)与作用域链
2016/12/08 Javascript
Vue数据驱动模拟实现1
2017/01/11 Javascript
微信小程序商城项目之淘宝分类入口(2)
2017/04/17 Javascript
在Vue组件上动态添加和删除属性方法
2018/02/23 Javascript
解决jquery的ajax调取后端数据成功却渲染失败的问题
2018/08/08 jQuery
vue微信分享到朋友圈 vue微信发送给好友
2018/11/28 Javascript
[32:39]完美世界DOTA2联赛循环赛 Forest vs Inki BO2第一场 11.04
2020/11/04 DOTA
Linux下python3.7.0安装教程
2018/07/30 Python
Python pip配置国内源的方法
2020/02/14 Python
使用Python和百度语音识别生成视频字幕的实现
2020/04/09 Python
python异步Web框架sanic的实现
2020/04/27 Python
python程序如何进行保存
2020/07/03 Python
Python 内存管理机制全面分析
2021/01/16 Python
利用HTML5绘制点线面组成的3D图形的示例
2015/05/12 HTML / CSS
欧洲顶级体育电子商务网站:SportsShoes.com
2018/03/27 全球购物
英国电信商店:BT Shop
2019/12/17 全球购物
夏季奶茶店创业计划书
2014/01/16 职场文书
物业公司的岗位任命书
2014/06/06 职场文书
活动总结格式
2014/08/30 职场文书
教师学习三严三实心得体会
2014/10/13 职场文书
公司慰问信范文
2015/03/23 职场文书
小学体育队列队形教学反思
2016/02/16 职场文书
JavaScript实现外溢动态爱心的效果的示例代码
2022/03/21 Javascript