-
汉诺塔游戏python实现
def move(n, a, b, c):
if n == 1:
print('move', a, '-->', c)
else:
move(n-1, a, c, b)
move(1, a, b, c)
move(n-1, b, a, c)
例如:
move(4, 'a', 'b', 'c')
执行步骤:
1.先执行move(4, 'a', 'b', 'c')
其中move(4, 'a', 'b', 'c')包括 move(3, 'a', 'c', 'b')
move(1, 'a', 'b', 'c')
move(3, 'b', 'a', 'c')
2. 然后执行move(4, 'a', 'b', 'c')中的move(3, 'a', 'c', 'b')
其中move(3, 'a', 'c', 'b') 包括move(2, 'a', 'b', 'c')
move(1, 'a', 'c', 'b')
move(2, 'c', 'a', 'b')
3.然后依次执行move(3, 'a', 'c', 'b') 中的move(2, 'a', 'b', 'c')中的所有函数,因为n=1满足了递归结束条件,至此move(2, 'a', 'b', 'c') 执行完毕
其中move(2, 'a', 'b', 'c') 包括move(1, 'a', 'c', 'b')
move(1, 'a', 'b', 'c')
move(1, 'b', 'a', 'c')
4.然后回到move(3, 'a', 'c', 'b')执行move(2, 'a', 'b', 'c')之后的代码,至此move(3, 'a', 'c', 'b')执行完毕
5.最后回到move(4, 'a', 'b', 'c')执行move(3, 'a', 'c', 'b') 之后的代码,至此move(4, 'a', 'b', 'c') 执行完毕 ,整个汉诺塔游戏完成了
-
总结
递归函数,层层递归的时候,先要一直算到递归条件结束,然后再一层一层的返回计算,就可以递归出结果了。