
汉诺塔问题是一个古典的数学问题,它只能用递归方法来解决。
在古代有一个梵塔,塔内有A、B、C三个座。
开始时A座上有64个盘子,盘子大小不同,但保证大的在下,小的在上。
现在有一个和尚想将这64个盘子从A座移动到C座,但他每次只能移动一个盘子,且在移动过程中在3个座上都必须保持大盘在下小盘在上的状态。
在移动过程中可以利用B座。
那么问题来了,用程序将移动步骤打印出来。
下面直接上代码:
########################
def hanluota(N, A, B, C):
if N == 1: # 将A座上剩下的第N个盘子移动到C座上
print("移动第 %d 个盘子从 %c 到 %c " %(N, A, C)) # 打印移动步骤
else:
hanluota(N-1, A, C, B) # 借助C座将N-1个盘子从A座移动到B座
print("移动第 %d 个盘子从 %c 到 %c " %(N, A, C)) # 打印移动步骤
hanluota(N-1, B, A, C)
if __name__ == "__main__":
#输入要移动的盘子个数
n = int(input("请输入要移动的盘子总数:"))
hanluota(n, 'A', 'B', 'C'); # 调用递归函数
########################
执行结果如下:
请输入要移动的盘子总数:5
移动第 1 个盘子从 A 到 C
移动第 2 个盘子从 A 到 B
移动第 1 个盘子从 C 到 B
移动第 3 个盘子从 A 到 C
移动第 1 个盘子从 B 到 A
移动第 2 个盘子从 B 到 C
移动第 1 个盘子从 A 到 C
移动第 4 个盘子从 A 到 B
移动第 1 个盘子从 C 到 B
移动第 2 个盘子从 C 到 A
移动第 1 个盘子从 B 到 A
移动第 3 个盘子从 C 到 B
移动第 1 个盘子从 A 到 C
移动第 2 个盘子从 A 到 B
移动第 1 个盘子从 C 到 B
移动第 5 个盘子从 A 到 C
移动第 1 个盘子从 B 到 A
移动第 2 个盘子从 B 到 C
移动第 1 个盘子从 A 到 C
移动第 3 个盘子从 B 到 A
移动第 1 个盘子从 C 到 B
移动第 2 个盘子从 C 到 A
移动第 1 个盘子从 B 到 A
移动第 4 个盘子从 B 到 C
移动第 1 个盘子从 A 到 C
移动第 2 个盘子从 A 到 B
移动第 1 个盘子从 C 到 B
移动第 3 个盘子从 A 到 C
移动第 1 个盘子从 B 到 A
移动第 2 个盘子从 B 到 C
移动第 1 个盘子从 A 到 C
________________END______________
网友评论