关于汉诺塔的思考,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')

执行结果:

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

转载于:https://www.cnblogs.com/render-inside/p/9182100.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值