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中的字典遍历备忘
Jan 17 Python
用Python创建声明性迷你语言的教程
Apr 13 Python
Python随机生成带特殊字符的密码
Mar 02 Python
Python 3.6 性能测试框架Locust安装及使用方法(详解)
Oct 11 Python
Python列表推导式、字典推导式与集合推导式用法实例分析
Feb 07 Python
Django 路由控制的实现代码
Nov 08 Python
numpy创建单位矩阵和对角矩阵的实例
Nov 29 Python
Python+OpenCV实现旋转文本校正方式
Jan 09 Python
在python中使用pyspark读写Hive数据操作
Jun 06 Python
详解Python IO口多路复用
Jun 17 Python
使用Keras训练好的.h5模型来测试一个实例
Jul 06 Python
Python之Sklearn使用入门教程
Feb 19 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 mysql 事务处理回滚操作(附实例)
2013/08/05 PHP
codeigniter框架The URI you submitted has disallowed characters错误解决方法
2014/05/06 PHP
两款万能的php分页类
2015/11/12 PHP
PHP程序员的技术成长规划
2016/03/25 PHP
详解Laravel视图间共享数据与视图Composer
2016/08/04 PHP
php数组指针操作详解
2017/02/14 PHP
js的.innerHTML = ""IE9下显示有错误的解决方法
2013/09/16 Javascript
javascript检测浏览器的缩放状态实现代码
2014/09/28 Javascript
详解JavaScript对象和数组
2015/12/03 Javascript
轻松使用jQuery双向select控件Bootstrap Dual Listbox
2015/12/13 Javascript
jQuery获取字符串中出现最多的数
2016/02/22 Javascript
基于jQuery实现带动画效果超炫酷的弹出对话框(附源码下载)
2016/02/22 Javascript
AngularJS实现一次监听多个值发生的变化
2016/08/31 Javascript
jQuery模拟下拉框选择对应菜单的内容
2017/03/07 Javascript
Angular.js去除页面中显示的空行方法示例
2017/03/30 Javascript
解决OneThink中无法异步提交kindeditor文本框中修改后的内容方法
2017/05/05 Javascript
React Native如何消除启动时白屏的方法
2017/08/08 Javascript
详解如何让InstantClick兼容MathJax、百度统计等
2017/09/12 Javascript
vue+vuex+axios+echarts画一个动态更新的中国地图的方法
2017/12/19 Javascript
JS实现的合并多个数组去重算法示例
2018/04/11 Javascript
jQuery事件blur()方法的使用实例讲解
2019/03/30 jQuery
javascript设计模式 ? 迭代器模式原理与用法实例分析
2020/04/17 Javascript
使用beaker让Facebook的Bottle框架支持session功能
2015/04/23 Python
Python求一批字符串的最长公共前缀算法示例
2019/03/02 Python
python如何读取bin文件并下发串口
2019/07/05 Python
详解基于python的多张不同宽高图片拼接成大图
2019/09/26 Python
Python利用for循环打印星号三角形的案例
2020/04/12 Python
python爬虫破解字体加密案例详解
2021/03/02 Python
CSS3 中filter(滤镜)属性使用详解
2020/04/07 HTML / CSS
荣耀商城:HIHONOR
2020/11/03 全球购物
Java基础类库面试题
2013/09/04 面试题
劳动实践课感言
2014/02/01 职场文书
情人节活动策划方案
2014/02/27 职场文书
岗位职责风险点
2014/03/12 职场文书
军人离婚协议书样本
2014/10/21 职场文书
用Python制作灯光秀短视频的思路详解
2021/04/13 Python