python递归函数如何用于tri_recursion函数

问题描述 投票:2回答:1

我是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

python recursion
1个回答
1
投票

尝试使用铅笔和纸张跟踪功能。在这种情况下,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

注意事项

  1. 在运行这个程序.k永远不会等于-1,事实上它是不可能的。
  2. 根据“编译器在程序中移动”来考虑控制流是错误的。编译器在执行期间不执行任何操作(JIT是另一回事)。最好从程序语言中的控制流程/执行顺序进行思考,在函数式编程和逻辑编程中的关系中进行等级考虑。
© www.soinside.com 2019 - 2024. All rights reserved.