汉诺塔问题是一个经典的问题。汉诺塔(Hanoi Tower),又称河内塔,源于印度一个古老传说。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,任何时候,在小圆盘上都不能放大圆盘,且在三根柱子之间一次只能移动一个圆盘。
求解:
1.将n-1个圆盘经过A→C→B
2.将A上剩的圆盘经过A→C
3.将剩下的n-1个圆盘经过B→A→C
def Hanoi(n, A, B, C):
if n > 0:
Hanoi(n - 1, A, C, B)
print("moving {} from to {}".format(A, C))
Hanoi(n - 1, B, A, C)
Hanoi(3, 'A', 'B', 'C')
'''
n是需要移动圆盘的个数
A B C是三根柱子
'''
moving A from to C 代表将A柱最上层的圆盘移动到C柱
以下同理
moving A from to C
moving A from to B
moving C from to B
moving A from to C
moving B from to A
moving B from to C
moving A from to C
Process finished with exit code 0
移动n个圆盘所需要移动的次数为:
def h(x):
if x == 1:
return 1
else:
return 2 * h(x - 1) + 1