汉诺塔操作可以分为两种情况(加了一些自己的理解,可能不是最正确的):
1、当n == 1时, 把a上的盘子直接移动到c上即可,也就是这个递归的终止条件;
2、当n > 1时,分为两个步骤:
步骤1:
将n-1个盘子从a移动到b,目的是为了可以将最大的那个n号盘子能顺利地从a移动到c;
将最大的n号盘子从a移动到c;
步骤2:
将n-1个盘子从b移动c。
源码:
def move(n, a, b, c):
if n == 1: # 终止条件
print(a, '-->', c)
else:
# 第一步: 把n-1个盘子从a移动到b和把第n个盘子从a移动到c
move(n - 1, a, c, b)
print(a, '-->', c)
# 第二步: 把n-1个盘子从b移动到c
move(n - 1, b, a, c)
move(3, 'A', 'B', 'C')
运行结果:
A --> C
A --> B
C --> B
A --> C
B --> A
B --> C
A --> C