题目:
有A,B,C三根针,将A针上N个从小到大叠放的盘子移动到C针,一次只能移动一个,小盘子必须在大盘子上面。求最少移动方案。
思路:
试想这个过程中,必然会经历那么一个步骤,即有一大坨N-1个盘子在B针这个中转站,而我们正将最大那个盘子(即第N个盘子)从A针移动至C针。
N-1个盘子被移动了两次才能到C,那么推而广之就是
F(n) = 2 * F(n-1) +1
实现:
#!/usr/bin/env python3
# -*- UTF-8 -*-
def move(n, a, b, c):
if n == 1:
print('move', a, '-->', c)
else:
move(n-1,a,c,b)
move(1,a,b,c)
move(n-1,b,a,c)
move(3, 'A', 'B', 'C')
结果: