1 回答

TA贡献58条经验 获得超75个赞
这是递归的典型应用。下面通俗的说明一下,主要明白意思,就好懂了。
def move(n, a, b, c): #这一句是定义move函数,其中n是盘子的数量,a是源柱,b是辅助柱子,c是目标柱子
if n==1: print a,'-->',c return
这段语句的意思是,当盘子只有1个的时候,就直接输出,将那个盘子从a柱移到c柱。并且会结束代码的执行!因为n=1是递归的边界条件(当你以后学算法学到递归的时候就知道了,每个递归程序都有一个边界条件,用于结束循环,跳出代码的执行)。
另外,else可以不加,因为如果你给的n是1,自然会执行if语句,如果不是1,自然顺序执行if后面的语句,不加也是可以的。
move(n-1,a,c,b)
从这里开始,就是函数的递归调用了(自己调用自己)。当有n个盘子的时候(n !=1),我们首先要将前面的n-1个盘子先移走,即将盘子从原柱通过目标柱移到辅助柱上,此时参数中的c实际就相当于是辅助柱了,所以有下面的语句进行路径输出
print a,'-->',c
移到辅助柱上当然是不够的,还要将辅助柱上的盘子移到目标柱去,所以下面的语句
move(n-1,b,a,c)
原先辅助柱b此时就是原柱了,将通过a作为辅助移到目标柱c上去。整个过程会重复的执行,比如最先执行的n-1,在n-1执行时,又会先将n-1个盘子的前n-1个盘子(即n-2)进行移动,以此递归,直到边界条件,当n为1时,就输出了最开始的那句话。
所以上面你有个问题是move为什么可以随意移动,原因就是递归函数自己调用自己,自己可以按照既定的规则移动,那参数的顺序改变了,每个参数代表的含义也不一样了,原来的目标柱在后续的移动步骤中可能就是辅助柱了,但移动的规则还是没变。所以递归的代码简洁难懂,就是这样的。
添加回答
举报