用递归算法解决汉诺塔问题

用递归算法解决汉诺塔问题问题的描述是 汉诺塔 又称河内塔 是一个源于印度古老传说 input the number of disks 3

欢迎大家来到IT世界,在知识的湖畔探索吧!

一、汉诺塔问题

在计算机的算法中,汉诺塔问题被列为经典的递归算法问题。问题的描述是:

汉诺塔(Tower of Hanoi),又称河内塔,是一个源于印度古老传说。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。

二、问题分析

用递归算法解决汉诺塔问题



欢迎大家来到IT世界,在知识的湖畔探索吧!

首先根据题目的意思,将汉诺塔定义为一个递归的问题,分别有X,Y,Z三根柱子,如果是只有一个圆盘,则直接从X=>Z,搬动一次即可;

如果是两个圆盘:则先从X=>Y,搬动最上面的到Y,然后X=>Z,把最大的盘子搬动Z,再将Y上的最小的盘搬到Z,即Y=>Z共三次搬动即可。

如果是三、四、五等等,n块的圆盘,可以把上面的圆盘都看作一个整体,逐一减少,变成了一个圆盘的问题。

三、算法实现

def hanoi(n, x, y, z): global counter if n == 1: #递归结束的条件 print(x + "=>" + z) counter += 1 else: hanoi(n-1, x, z, y) #注意参数的循序,当n-1时,x=>y print(x + "=>" +z) #x=>z hanoi(n-1, y, x, z) #当n-1时,y=>z counter += 1 if __name__ == '__main__': counter = 0 num = input("input the number of disks:") hanoi(num, 'X', 'Y', 'Z') print("The counter number is:", counter)

欢迎大家来到IT世界,在知识的湖畔探索吧!

四、运行结果

input the number of disks:3

X=>Z

X=>Y

Z=>Y

X=>Z

Y=>X

Y=>Z

X=>Z

(‘The counter number is:’, 7)

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/105708.html

(0)
上一篇 1天前
下一篇 1天前

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们YX

mu99908888

在线咨询: 微信交谈

邮件:itzsgw@126.com

工作时间:时刻准备着!

关注微信