汉诺塔问题python_Python汉诺塔问题困惑好久。。。

def move(n, a, b, c):

if n==1:

print a,'-->',c

return

else:

move(n-1,a,c,b)

print a,'-->',c

move(n-1,b,a,c)

move(4, 'A', 'B', 'C')

本人小白,这个递归困惑了好久,今天自己回答一下,不知我自己的理解是否正确,请大神们指点!!!

The first----在向上面大神请教之后,我自己仔细研究了这个Python汉诺塔,假设为3个盘子的情况做的解析!其实每一次都是一次循环,当n=3,借助B移动到C,直接移动3个肯定不行,要首先执行A柱上面的2(3-1)个,要把他们移到B上,再把A最后一个大盘子移到C柱,最后把B上的2个移到C,完工,这其实类似于把大象关冰箱要几步一样。

The second----好了,那么首先A上的2个移到B要借助C,这就是(2,A,C,B)即A借助C移到B,那么这2(3-1)个直接移动也不行啊!再继续分解,这2个先移动1个,先把1个(2-1)先移动到C,因为有3个柱子,所以规规矩矩写法(1,A,B,C),到这估计就会产生疑问,代码不是A到C再到B,这怎么(1,A,B,C)?但是实际上,这里A,B,C角色已经互换,这里的A还是那个A,这里的B其实就变成了代码里的C了,这里的C变成代码里的B了,屁屁这么多,这一步的实际操作只是A-->C,所以又有了下面printA-->C,通过这一步这1个盘子已经在C上。

The third----然后,A柱子上还有2个,这时候和上面一样,先移动最上面的1个,自己演示过的肯定知道要放到B位置,这里又要注意了,实际上这里参数又发生角色互换,这里的B已然已经代表了''C'',所以又契合了printA-->C,这个时候还有一步,把刚刚那1个小盘子放到这一步这个盘子上面,这一步其实是(1,C,A,B),实际操作就一步,C-->B,这里已然是角色互换呼应printA-->C。至此,第一大步已完成,2个在B上,第三大步把A最后一个大盘子移到C,printA-->C(其实就是把大象塞进去这一步)。

LAST:剩下的其实就和上面第一大步一样,但注意的是,角色也是全部变了。

综上所述,本人总结,其实所谓的A,B,C命名三个柱子,只是命个名,方便操作,但千万不能形成惯性思维,这里的A,B,C变化多端。为了阐述这些,我做了一个图,画的比较凌乱!我自己看懂,不知道各位看不看懂。。。。

最后请各位大神指出我的错误/不足之处,本人小白,不胜感激!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值