python的递归算法学习(3):汉诺塔递归算法
汉诺塔问题是递归函数的经典应用,它来自一个古老传说:在世界刚被创建的时候有一座钻石宝塔A,其上有64个金蝶。所有碟子按从大到小的次序从塔底堆放至塔顶。紧挨着这座塔有另外两个钻石宝塔B和C。从世界创始之日起,波罗门的牧师就一直在试图把塔A上的碟子移动到C上去,其间借助于塔B的帮助。每次只能移动一个碟子,任何时候都不能把一个碟子放在比它小的碟子上面。当牧师们完成这个任务时,世界末日也就到了。 
对于汉诺塔问题的求解,可以通过以下3步实现: 
(1)将塔A上的n -1个碟子借助C塔先移动到B塔上; 
(2)把塔A上剩下的一个碟子移动到塔C上; 
(3)将n - 1个碟子从B塔借助塔A移动到塔C上。
很显然,这是一个递归求解的过程,假设碟子数n=3时,汉诺塔问题的求解过程如下图所示:
汉诺塔的递归算法
i = 1
def move(n, mfrom, mto) :
global i
print("第%d步:将%d号盘子从%s -> %s" %(i, n, mfrom, mto))
i += 1 def hanoi(n, A, B, C) :
if n == 1 :
move(1, A, C)
else :
hanoi(n - 1, A, C, B)
move(n, A, C)
hanoi(n - 1, B, A, C) #********************程序入口**********************
try :
n = 3
print("移动步骤如下:")
hanoi(n, 'A', 'B', 'C')
except ValueError:
print("please input a integer n(n > 0)!")
python的递归算法学习(3):汉诺塔递归算法的更多相关文章
- python运用turtle 画出汉诺塔搬运过程
		
python运用turtle 画出汉诺塔搬运过程 1.打开 IDLE 点击File-New File 新建立一个py文件 2.向py文件中输入如下代码 import turtle class Stac ...
 - C语言之算法初步(汉诺塔--递归算法)
		
个人觉得汉诺塔这个递归算法比电子老鼠的难了一些,不过一旦理解了也还是可以的,其实网上也有很多代码,可以直接参考.记得大一开始时就做过汉诺塔的习题,但是那时代码写得很长很长,也是不理解递归的结果.现在想 ...
 - 题目1458:汉诺塔III(不一样的汉诺塔递归算法)
		
题目链接:http://ac.jobdu.com/problem.php?pid=1458 详解链接:https://github.com/zpfbuaa/JobduInCPlusPlus 参考代码: ...
 - python数据结构_递归_汉诺塔问题
		
已经不是第一次写这个汉诺塔问题, 其实递归还真是不太好理解, 因为递归这种是想其实有点反人类, 为什么? 因为不太清楚, 写个循环一目了然, 用递归其实要把核心逻辑理清楚, 要不根本没法进行下去 所有 ...
 - Python算法_递归:汉诺塔
		
游戏链接:https://zhangxiaoleiv.github.io/app/TowerOfHanoi/Hanoi.html 汉诺塔游戏算法: 1 def hanoi(n,x,y,z): 2 if ...
 - python编程(一)汉诺塔
		
题目描述 编写move(n, a, b, c)函数,它接收参数n,表示3个柱子A.B.C中第1个柱子A的盘子数量,然后打印出把所有盘子从A借助B移动到C的方法. 例: move(3, 'A', 'B' ...
 - 运用Turtle实现汉诺塔的可视化运行(递归算法)
		
运用Turtle实现汉诺塔的可视化运行(递归算法) 汉诺塔问题又名河内塔问题,是源于印度一个古老传说的益智玩具.大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆 ...
 - C语言数据结构----递归的应用(斐波拉契数列、汉诺塔、strlen的递归算法)
		
本节主要说了递归的设计和算法实现,以及递归的基本例程斐波拉契数列.strlen的递归解法.汉诺塔和全排列递归算法. 一.递归的设计和实现 1.递归从实质上是一种数学的解决问题的思维,是一种分而治之的思 ...
 - 递归:汉诺塔 - 零基础入门学习Python024
		
递归:汉诺塔 让编程改变世界 Change the world by program 似乎谈到递归算法就要拿汉诺塔来举例,没办法,因为小甲鱼小时候太笨了,这个游戏老是玩不过关,好不容易在自学编程的时候 ...
 
随机推荐
- 05,Python网络爬虫之三种数据解析方式
			
回顾requests实现数据爬取的流程 指定url 基于requests模块发起请求 获取响应对象中的数据 进行持久化存储 其实,在上述流程中还需要较为重要的一步,就是在持久化存储之前需要进行指定数据 ...
 - java.lang.RuntimeException: Handler (com.***.behavior.BEvent$1) {421bca80} sending message to a Hand
			
java.lang.RuntimeException: Handler (com.***.behavior.BEvent$1) {421bca80} sending message to a Hand ...
 - 使用wsimport命令生成webService客户端代码实例
			
wsimport简介 在JDK的bin文件夹中,有一个wsimport.exe工具,可依据wsdl文件生成相应的类文件,将生存在本地这些类文件拷贝到需要使用的项目中,就可以像调用本地的类一样调用web ...
 - centos使用--排查服务是否可用
			
端口与服务的关系 一台拥有IP地址的主机可以提供许多服务,比如Web服务.FTP服务.SMTP服务等,这些服务完全通过1个IP地址来实现.那么,主机是怎样区分不同的网络服务呢?显然不能只靠IP地址,因 ...
 - Android字体大小怎么自适应不同分辨率?
			
今天有人问我,android系统不同分辨率,不同大小的手机,字体大小怎么去适应呢?其实字体的适应和图片的适应是一个道理的. 一. 原理如下: 假设需要适应320x240,480x320分辨率.在res ...
 - USACO Section1.3 Ski Course Design 解题报告
			
skidesign解题报告 —— icedream61 博客园(转载请注明出处)------------------------------------------------------------ ...
 - GTID环境中手动修复主从故障一例(Error 1146)
			
Preface In my last test of pt-heartbeat,both of master and slave were out of disk.And the my ...
 - window.parent 、window.top及window.self 详解
			
在应用有frameset或者iframe的页面时,parent是父窗口,top是最顶级父窗口(有的窗口中套了好几层frameset或者iframe),self是当前窗口. 1. window.self ...
 - 我与0xc000007b奋斗的日子
			
自从新换了一台笔记本,就开始重装各种软件,就在将要开始软工课设的重要的日子里,我默默地在运行客户端时出现了一个这样的错误: 鉴于本人很废柴,自然不可能去查内存,所以开始各种度娘必应和谷歌,哦!原来应该 ...
 - 第八篇:python基础_8 面向对象与网络编程
			
本篇内容 接口与归一化设计 多态与多态性 封装 面向对象高级 异常处理 网络编程 一. 接口与归一化设计 1.定义 (1)归一化让使用者无需关心对象的类是什么,只需要知道这些对象都具备某些功能就可以了 ...