尝试用铅笔和纸追踪该功能。在这种情况下,该函数的打印语句可能会引起误解。
考虑一下程序的这一部分,
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