python-hanoi
#!/usr/bin/env python
#-*- coding:utf-8 -*-
############################
#File Name: hanoi.py
#Author: frank
#Mail: frank0903@aliyun.com
#Created Time:2018-04-30 09:36:13
############################ #基本思想是:先将最大的圆盘从src搬到dst
#如果n=1,那么直接将圆盘从src搬到dst;
#如果n=2,那么先将第1个圆盘从src搬到mid上,然后将第2个圆盘从src搬到dst,然后将第1个圆盘从mid搬到dst上;
#如果有n个圆盘,那么先将n-1个圆盘从src搬到mid上,然后将第n个圆盘从srt搬到dst, 然后将n-1个圆盘从mid搬到dst;以此类推
#可以这么理解,将n个圆盘抽象成"2个"圆盘,第n个圆盘当做"第2个"圆盘,另外的n-1个圆盘抽象成"第1个"圆盘,那么就可以当做是"2个"圆盘的搬运;
#不同层次的圆盘移动时,src,mid,dst会发生相应的变化,而不是最初第n个圆盘移动时的位置,这样就保证所有移动的准确性且不会冲突
#总之,抽象成"2个圆盘"的思路,并保证圆盘移动步骤的闭合性,就能确保程序的正确运行
count = 0 def hanoi(n, src, mid, dst):
global count if n == 1:
¦ print("{}:{}--->{}".format(n, src, dst))
¦ count += 1
else:
¦ hanoi(n-1, src, dst, mid)
¦ print("{}:{}--->{}".format(n, src, dst))
¦ hanoi(n-1, mid, src, dst)
¦ count += 1 hanoi(3, "A", "B", "C")
print(count) #n=3时,圆盘搬运的具体过程如下:
#
#hanoi(2, A, C, B)
# hanoi(1, A, B, C)
# print("{}:{}--->{}".format(1, A, C)) ==={1:A--->C}
# print("{}:{}--->{}".format(2, A, B)) ==={2:A--->B}
# hanoi(1, C, A, B)
# print("{}:{}--->{}".format(1, C, B)) ==={1:C--->B}
#print("{}:{}--->{}".format(3, A, C)) ==={3:A--->C}
#hanoi(2, B, A, C)
# hanoi(1, B, C, A)
# print("{}:{}--->{}".format(1, B, A)) ==={1:B--->A}
# print("{}:{}--->{}".format(2, B, C)) ==={2:B--->C}
# hanoi(1, A, B, C)
# print("{}:{}--->{}".format(1, A, C)) ==={1:A--->C}

python-hanoi的更多相关文章
- python递归三战:Sierpinski Triangle、Tower of Hanoi、Maze Exploring
本文已做成视频教程投稿b站(视频版相对文本版有一些改进),点击观看视频教程 本文主要通过三个实例来帮助大家理解递归(其展示动画已上传B站): 谢尔宾斯基三角形(Sierpinski Triangle) ...
- 用递归方法解决汉诺塔问题(Recursion Hanoi Tower Python)
汉诺塔问题源于印度的一个古老传说:梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘.梵天命令婆罗门把圆盘按大小顺序重新摆放在另一根柱子上,并且规定小圆盘上不能放 ...
- Python学习札记(十四) Function4 递归函数 & Hanoi Tower
reference:递归函数 Note 1.在函数内部,可以调用其他函数.如果一个函数在内部调用自身本身,这个函数就是递归函数. eg.计算阶乘: #!/usr/bin/env python3 def ...
- python编写汉诺塔 Hanoi
#hanoi.py count = 0 def hanoi(n, src, dst, mid): #src为原1号柱子 dst 目标3号柱子 mid中间2号过渡柱子 global count #对全局 ...
- 汉诺塔问题(Hanoi Tower)递归算法解析(Python实现)
汉诺塔问题 1.问题来源:汉诺塔来源于印度传说的一个故事,上帝创造世界时作了三根金刚石柱子,在一根柱子上从上往下从小到大顺序摞着64片黄金圆盘.上帝命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根 ...
- python面试大全
问题一:以下的代码的输出将是什么? 说出你的答案并解释. class Parent(object): x = 1 class Child1(Parent): pass class Child2(Par ...
- python公司面试题集锦 python面试题大全
问题一:以下的代码的输出将是什么? 说出你的答案并解释. class Parent(object): x = 1 class Child1(Parent): pass class Child2(Par ...
- python爬虫爬取全球机场信息
--2013年10月10日23:54:43 今天需要获取机场信息,发现一个网站有数据,用爬虫趴下来了所有数据: 目标网址:http://www.feeyo.com/airport_code.asp?p ...
- 汉诺塔 python版
汉诺塔问题:如果将n个盘子(由小到大)从a通过b,搬到c,搬运过程中不能出现小盘子在大盘子下面的情况. 思路分析:假设前要移动第100个盘子,分两步走,移动第99个:再移动第100个:而要移动第99个 ...
- Python入门学习(一)
看完了莫烦Python的视频,对于Python有了一点感觉,接下来打算把小甲鱼的视频啃完,附上学习网址:http://blog.fishc.com/category/python 小甲鱼的视频是从零基 ...
随机推荐
- VMware 8安装Mac OS X 10.7
(Windows 7 X64环境下,VMware 8.0正式版)虚拟机首尝MAC OS X 10.7 Lion系统成功,特将此好消息分享.2年了,终于我也装上了Mac,我也成功的尝到了苹果味道,看着那 ...
- WebLogic Operator初试
时隔几个月,重拾WebLogic 为什么是WebLogic 简单说一句就是,因为WebLogic在中间件里面够复杂. Server不同的角色 AdminServer和Managed Server之间的 ...
- 重设WebLogic AdminServer的密码
1.先停止运行的WebLogic Server $ $DOMAIN_HOME/bin/stopWebLogic.sh 2.迁移AdminServer下的数据目录 $ mv $DOMAIN_HOME/s ...
- Android批量图片载入经典系列——Volley框架实现多布局的新闻列表
一.问题描写叙述 Volley是Google 2013年公布的实现Android平台上的网络通信库,主要提供网络通信和图片下载的解决方式,比方曾经从网上下载图片的步骤可能是这种流程: 在ListAda ...
- iOS:UIView、UIControl、UIButton、UILabel简单的属性和方法常识
常见属性和方法 一 .UIVIew 常见属性 1.frame 位置和尺寸(以父控件的左上角为原点(0,0)) 2.center 中点 (以父控件的左上角为原点(0,0)) 3.bounds 位置和尺寸 ...
- delphi 调用 java
1.设置JVM路径 FJavaVM := TJavaVM.Create(JNI_VERSION_1_6, 'C:\Program Files\Java\jre6\bin\server\jvm. ...
- yum安装 lnmp (linux+nginx+php7.1+mysql5.7)
1.第一步先更新yum update 2.yum安装nginx安装nginx最新源:yum localinstall http://nginx.org/packages/centos/7/noarch ...
- 入门教程: JS认证和WebAPI
转自:http://www.jianshu.com/p/fde63052a3a5 本教程会介绍如何在前端JS程序中集成IdentityServer.因为所有的处理都在前端,我们会使用一个JS库oidc ...
- 扩展Jquery方法创建LigerUI Grid
///** //*封装jquery get请求ajax //*author:叶明龙 //*time:2012-12-10 //*/ function getAjax(url, para, fn) { ...
- Solidworks的Toolbox拖出来的零件另存也没用,重新打开之后被自动替换怎么办
工具-选项-系统选项-异型孔向导,取消勾选"将此文件夹设为Toolbox零部件的默认搜索位置" 这样把Toolbox的零部件另存之后,就可以修改,比如添加草图和特征,然后另存之 ...