def move(n, a, b, c):
if n == 1:
print('move', a, '-->', c)
else:
move(n-1, a, c, b)#当大于1个的时候先把a移到b (小的那个移到b当中介)
move(1, a, b, c)#把a移到b后,然后把a移到c(大的那个移到c当底子)
move(n-1, b, a, c)#把a的两个都移走后,把小的那个(b)上的那个移回c上(把两个中小的b移到c上)
宏观上想,就三步:① 将上面n-1个“整体“由A放到B暂存(这一步比较复杂,先别想这个有序的整体怎么保证挪过去后仍是“上小下大”有序);② 将A底层最大的那个挪到C;③ 将B上暂存的挪到C(这一步也很复杂)。这类似于把大象放进冰箱需要几步?
微观上可以看看这个流程图,最终实现过程如下:
A --> C
A --> B
C --> B
A --> C
B --> A
B --> C
A --> C