今天学习python函数时,打算写一个汉诺塔问题的实现,先是在脑海里想象了一下,有1块石头的时候,该怎么移,有2块石头的时候,该怎么移,越想越多,感觉脑袋就
搅糊了,于是准备直接写代码。其实,之所以想象会把自己搞迷糊,是因为想象的石块会越来越多,移动的步骤也越来越多。而如果使用代码,就可以站到一个比较抽象
的层次,移动的过程中,最大的问题就是把A柱的最大的一块,移到C柱上,如图所示:
也就是说,假设有A、B、C三根柱子,有n个石盘,我们第一步要做的就是A的最大的一个石盘移动到C,如何才能做到这一步?那就是通过C把n-1的石盘移动到B上,
然后把A上最大的一块移到C。剩余的操作类似,把B上的n-1的石盘,通过A移到C上。有了这个思路,代码就很简单了:
def f_move(n,a,b,c):
if n==1:
print('move:',a,'-->',c)
else:
#通过C,把A上n-1的石盘移动到B
f_move(n-1,a,c,b)
#把A上最大的一块石盘移动到C
f_move(1,a,b,c)
#通过A,把B上n-1的石盘移动到C
f_move(n-1,b,a,c)
f_move(4,'A','B','C')
执行结果:
抽象的力量真的是无穷啊。