关于汉诺塔的思考,python3

今天学习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')

执行结果:

抽象的力量真的是无穷啊。

posted @ 2018-06-14 11:06  码农小麦  阅读(176)  评论(0编辑  收藏  举报