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 小甲鱼的视频是从零基 ...
随机推荐
- Google Breakpad 完全解析(二) —— Windows前台实现篇
原创文章,转载请标明出处:Soul Apogee (http://bigasp.com),谢谢. 好,看完了如何使用breakpad,我们现在看看breakpad在Windows下到底是如何实现的呢? ...
- Log4net的一点改进
昨天把log4net更新了一下,发现从NUGET上安装log4net后,使用方式简化了许多.以前我在文章<log4net使用简介>中介绍过,使用log4net需要有两步前期准备工作: 在使 ...
- arithmetic-slices
https://leetcode.com/problems/arithmetic-slices/ public class Solution { public int numberOfArithmet ...
- C# http Post 方法
摘自: http://geekswithblogs.net/rakker/archive/2006/04/21/76044.aspx Http Post in C# Searched out on t ...
- 在做了 BasePage 时: 只有在配置文件或 Page 指令中将 enableSessionState 设置为 true 时,才能使用会话状态。还请确保在应用程序配置的 / / 节中包括
摘自: http://lichengguizy.blog.163.com/blog/static/11771858620122342749552/ 只有在配置文件或 Page 指令中将 enableS ...
- 【实践】js封装 jq siblings 方法
思路: 1.获取调用元素的父元素下的所有子元素(即它的所有同辈元素和调用元素本身) 2.遍历调用元素父元素下的所有子元素 除调用元素外的所有元素保存在一个数组里面 代码如下: <!DOCTYPE ...
- [TypeScript] Work with DOM Elements in TypeScript using Type Assertions
The DOM can be a bit tricky when it comes to typing. You never really know exactly what you're going ...
- Hooops - iPhone上的Dribbble应用
来源:GBin1.com Dribbble一直没有一个官方的应用,有时候这真的很恶心.有时你远离电脑,却想浏览一些镜头来寻找灵感.对于那些喜欢Dribbble自然,充满原始感觉的人们,非常幸运的,可以 ...
- Windows Vista如何让梦幻桌面支持更多格式
Windows Vista 梦幻桌面(DreamScene)到底能不能支持除了Mpeg/mpg以外的格式? 很多人说梦幻桌面的视频格式有限,像AVI.RM.RMVB就不能做成梦幻桌面!也有很多朋友着急 ...
- PHPMailer_v5.1 使用[转]
<?php /* * email 报警,主要检查服务器数据库是否还能正常连接 */ require("../common/config.php"); include(&quo ...