汉诺塔问题
把盘子从A针移到C针上,中间借助的针为B针
src … A
medium …B
dest…C
def move(src, dest):
# 将一个盘子从一个针上移到另一个针上
print(src, "-->", dest)
def hanoi(n, src, medium, dest):
# 将多个盘子从一个针上移到另一个针上,是一个递归过程
if n == 1:
move(src, dest)
else:
hanoi(n - 1, src, dest, medium) # 将A上n-1个盘子移到B针上(借助C针) hanoi(n-1, 'A', 'C', 'B')
move(src, dest) # 把A针上剩下的一个盘子移到C针上 move('A', 'C')
hanoi(n - 1, medium, src, dest) # 把n-1个盘子从B针移到C针上(借助A针) hanoi(n-1, 'B', 'A', 'C')
m = 3
hanoi(m, 'A', 'B', 'C')
A --> C
A --> B
C --> B
A --> C
B --> A
B --> C
A --> C
参考:
《C++语言程序设计》 郑莉等,例3-10.