def move(n,a,b,c): #1
if n==1: #2
print(a,'-->',c) #3
else: #4
move(n-1,a,c,b) #5
move(1,a,b,c) #6
move(n-1,b,a,c) #7
print(move(3,'A','B','C')) #8
以上是我从网上看到的实现方法,有几个地方不太明白,求解答,非常感谢~
假如n=3,执行move的时候会运行到#5,#5执行完了以后的结果是move(2,a,c,b),然后是又跳回到#1重新执行,讲n-1传递给n,a传递给a,c传递给b,b传递给c,如果我的a,b,c的值为X,Y,Z的话,那重新执行的也就是move(2,X,Z,Y),然后继续执行到#5,又重新调用自身,这个时候是不是就变成了move(1,X,Y,Z)了?然后匹配了if的条件,输出了X-->Z吗?输出了#3以后,再往下是怎么执行的,直接执行#6了吗?好像也不对呀,#6是的n=1,那不是直接有输出了X-->Z吗?
有点糊涂了,小弟初学python,以前也没编程基础,网上看了其他资料和视频,还找了汉诺塔游戏玩了下,最终还是没看明白,天资愚钝,希望各位能帮助下小弟,在此谢过!
越详细越好。
经过这几天自己琢磨勉强看懂了一些,但是还是感觉太抽象了。
请问为什么move(n-1,a,c,b)代表把n-1个盘子从a借助c移动到b啊,move是我定义函数的名字,感觉没什么道理呀!
还有python的递归函数在调用自身很多层的时候,在什么情况下才认为一层的调用结束了呀,是有return返回?还是有print输出?有print的输出的时候是否会继续往下执行?还是退回到上一层?
真心想弄明白,我看网上很多人都是只是说,把所有盘子的移动看成三步,先把n-1借助C移动到B,再将n从A移动到C,再把n-1从B移动到C,这个道理我也能勉强想明白,但是代码的实现就真的无法理解了呀!