'''
问题:
有三个柱子A、B、C。移动n个盘子从 A -> C
分析:
步骤1: 移动前n-1个盘子 A -> B
步骤2: 移动第n个盘子 A -> C
步骤3: 移动前n-1个盘子 B -> C
实验:
(n个盘子从上到下编号:1, 2, 3,...,n)
n=2:
move 1 A -> B 步骤1:移动前n-1个盘子 A -> B
move 2 A -> C 步骤2:移动第n个盘子到 A -> C
move 1 B -> C 步骤3:移动前n-1个盘子 B -> C
n=3:
move 1 A -> C
move 2 A -> B
move 1 C -> B 移动前n-1个盘子 A -> B
move 3 A -> C 移动第n个盘子到 A -> C
move 1 B -> A
move 2 B -> C
move 1 A -> C 移动前n-1个盘子 B -> C
n=4:
4 A C
3 A B
4 C B
2 A C
4 B A
3 B C
4 A C
可以看到,
要把盘子A->B 要通过C,
把盘子从B->C要通过A
def move(n, start,end, middle)
move n start -> middle
move n-1 start -> end
move n middle-> end
if n==1:
move 1 A -> C
move(n, 'B', 'C', 'A')
'''
# def move(n, A, B, C): # 从A -> B通过C
# print('move %d %s -> %s' % (n, A, C))
# print('move %d %s -> %s' % (n - 1, A, B))
# print('move %d %s -> %s' % (n, C, B))
# n -= 1
# if n == 1:
# return
# move(n, B, C, A) # 从B -> C通过A
# move(3, 'A', 'B', 'C')
def hanoi(n, a, b, c):
if n == 1:
print(n, a, '-->', c) # 移动第n个盘子到 A -> C
else:
hanoi(n - 1, a, c, b) # 移动前n-1个盘子 A -> B 通过 C
print(n, a, '-->', c)
hanoi(n - 1, b, a, c) # 移动前n-1个盘子 B -> C 通过 A
# 调用
hanoi(3, 'A', 'B', 'C')