您的位置:首页 > 编程语言 > Python开发

Python解决汉罗塔问题(递归)

2020-03-29 18:58 302 查看

汉罗塔问题

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

问题解决--用递归思想

假设塔有 n 层,从A移动到B,辅助是C。

如果塔只有一层,直接将盘子从A移动到B:A->B

如果塔有两层,先将小盘子从A移动到C,再将大盘子从A移动到B,最后将小盘子从C移动到B:A-> C; A->B; C->B。

类似,如果有n层,只需要先将n-1层移动到C,再将最后一个盘子移动到B,再将n-1层从C移动到B。所以,可以归纳为以下三个步奏: 

  • hanoi(n-1,A,C,B)   #第一个参数表示层数,第二三四分别表示从A到C,辅助位B
  • A->B                    #A移动到B
  • hanoi(n-1,B,C,A)  

Python代码

def hanoi(n, a = 'A', b = 'B', c = 'C'):    #level = n,  A->B
print 'level = %d' %n
if n == 1:
print '%d: %s -> %s' % (n,a,b)
else:
hanoi(n-1, a, c, b)
print '%d: %s -> %s' % (n,a,b)
hanoi(n-1, c, b, a)

运行结果:

print 'level = 1'
hanoi(1)
print 'level = 3'
hanoi(3)
--------------------------------------------------------------
level = 1
1: A -> B
level = 3
1: A -> B
2: A -> C
1: B -> C
3: A -> B
1: C -> A
2: C -> B
1: A -> B

 

转载于:https://www.cnblogs.com/zhaoxy/p/4974938.html

  • 点赞
  • 收藏
  • 分享
  • 文章举报
ae668536 发布了0 篇原创文章 · 获赞 0 · 访问量 181 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: