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 相关文章推荐
python3访问sina首页中文的处理方法
Feb 24 Python
Python 安装setuptools和pip工具操作方法(必看)
May 22 Python
python计算auc指标实例
Jul 13 Python
Python 读取某个目录下所有的文件实例
Jun 23 Python
python 简单照相机调用系统摄像头实现方法 pygame
Aug 03 Python
Python3.6简单的操作Mysql数据库的三个实例
Oct 17 Python
使用Python向DataFrame中指定位置添加一列或多列的方法
Jan 29 Python
python selenium执行所有测试用例并生成报告的方法
Feb 13 Python
Python持续监听文件变化代码实例
Jul 22 Python
Python confluent kafka客户端配置kerberos认证流程详解
Oct 12 Python
pycharm 快速解决python代码冲突的问题
Jan 15 Python
python 实现的截屏工具
May 08 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 基础教程(二)
2006/10/09 PHP
PHP Ajax中文乱码问题解决方法
2009/02/27 PHP
php入门学习知识点八 PHP中for循环基本应用之九九乘法口绝表
2011/07/14 PHP
php实现登陆模块功能示例
2016/10/20 PHP
Extjs中常用表单介绍与应用
2010/06/07 Javascript
jquery struts 验证唯一标识(公用方法)
2013/03/27 Javascript
javascript中RegExp保留小数点后几位数的方法分享
2013/08/13 Javascript
JS实现距离上次刷新已过多少秒示例
2014/05/23 Javascript
取得元素的左和上偏移量的方法
2014/09/17 Javascript
jQuery后代选择器用法实例
2014/12/23 Javascript
PageSwitch插件实现100种不同图片切换效果
2015/07/28 Javascript
安装使用Mongoose配合Node.js操作MongoDB的基础教程
2016/03/01 Javascript
js点击按钮实现水波纹效果代码(CSS3和Canves)
2016/09/15 Javascript
js利用clipboardData实现截屏粘贴功能
2016/10/12 Javascript
js HTML5多媒体影音播放
2016/10/17 Javascript
微信小程序动态的加载数据实例代码
2017/04/14 Javascript
JavaScript体验异步更好的解决办法
2018/01/08 Javascript
webstorm添加*.vue文件支持
2018/05/08 Javascript
Python的Django框架中的数据库配置指南
2015/07/17 Python
使用Python从零开始撸一个区块链
2018/03/14 Python
解决pyttsx3无法封装的问题
2018/12/24 Python
python3实现elasticsearch批量更新数据
2019/12/03 Python
在keras中获取某一层上的feature map实例
2020/01/24 Python
Python3和PyCharm安装与环境配置【图文教程】
2020/02/14 Python
Python基于pandas爬取网页表格数据
2020/05/11 Python
详解Anaconda安装tensorflow报错问题解决方法
2020/11/01 Python
澳大利亚第一的设计师礼服租赁网站:GlamCorner
2017/08/13 全球购物
COACH德国官方网站:纽约现代奢侈品牌,1941年
2018/06/09 全球购物
泰国健康和美容服务预订网站:GoWabi
2019/06/03 全球购物
老公保证书范文
2014/04/29 职场文书
校长竞聘演讲稿
2014/05/16 职场文书
经管应届生求职信范文
2014/05/18 职场文书
2016自主招生教师推荐信范文
2015/03/23 职场文书
村党组织公开承诺书
2015/04/30 职场文书
2016年幼儿园教师师德承诺书
2016/03/25 职场文书
gateway网关接口请求的校验方式
2021/07/15 Java/Android