我是python(编程)的新手,我发现the below recursive program很难遵循。在调试程序时,我发现它经历了递归,并且k
的值在每次递归时递减-1。在某一点上,k
为-1,编译器移动到else
部分并返回0。
最后k
值变为1,这是怎么发生的?
def tri_recursion(k):
if(k>0):
result = k+tri_recursion(k-1)
print(result)
else:
result = 0
return result
print("\n\nRecursion Example Results")
tri_recursion(6)
并输出:
递归示例结果 1 3 6 10 15 21
尝试使用铅笔和纸张跟踪功能。在这种情况下,print语句insde该函数可能有点误导。
考虑这部分程序,
if(k>0):
result = k+tri_recursion(k-1)
...
从这里,
tri_recursion(6) = 6 + tri_recursion(5)
所以为了获得tri_recursion(6)
的结果,我们必须得到tri_recursion(5)
的结果遵循这个逻辑,问题简化为:
tri_recursion(6)
= 6 + tri_recursion(5)
= 6 + 5 + tri_recursion(4)
= 6 + 5 + 4 + tri_recursion(3)
= 6 + 5 + 4 + 3 + tri_recursion(2)
= 6 + 5 + 4 + 3 + 2 + tri_recursion(1)
= 6 + 5 + 4 + 3 + 2 + 1 + tri_recursion(0)
现在注意0不大于0所以程序移动到else子句的主体:
else:
result = 0
...
这意味着tri_recursion(0) = 0
。因此:
tri_recursion(6)
= 6 + 5 + 4 + 3 + 2 + 1 + tri_recursion(0)
= 6 + 5 + 4 + 3 + 2 + 1 + 0
= 21
k
永远不会等于-1
,事实上它是不可能的。