'''
汉诺塔游戏实现:
有A,B,C三根针,将A针上n个从小到大叠放的盘子移动到C针
一次只能移动一个,不重复移动,小盘子必须在大盘子上面。
如:
(1) n = 1
A --> C
(2) n = 2
A --> B
A --> C
B --> A
(3) n = 3
A --> C
A --> B
C --> B
A --> C
B --> A
B --> C
A --> C
一共就三步:
把 n-1 号盘子移动到缓冲区
把1号从起点移到终点
然后把缓冲区的n-1号盘子也移到终点
'''
# 1.如果只有一个盘子 A --> C
# 2.如果盘子大于等于2的情况下 我们总是可以看成是2个盘子 一个是最下面的盘子和最上面的一个或者是所有的盘子
# 2.1 先把最上面的盘子 A --> B
# 2.2 把最下面的盘子 A --> C
# 2.3 把B柱上的盘子 B --> C
# 定义一个函数解决汉诺塔问题
def hannuoTower(num,a,b,c):
# 参数 num 代表的是盘子 a b c分别代表的是A柱 B柱 C柱
# 第一个条件 基线条件
# 如果只有一个盘子 A --> C
if num == 1:
print('第 1 个盘子从',a,'->',c)
else:
# 第二个条件 递归条件
# num >= 2的情况
# 2.1 先把最上面的盘子 A --> B 借助C柱 num-1 除去最下面的那个盘子
hannuoTower(num-1,a,c,b)
# 2.2 把最下面的盘子 A --> C
print('第',num,'个盘从',a,'->',c)
# 2.3 把B柱上的盘子 B --> C
hannuoTower(num-1,b,a,c)
hannuoTower(3,'A','B','C')
汉诺塔游戏——python解决方法
最新推荐文章于 2024-06-14 09:50:01 发布