无法验证此递归程序的输出

unable to validate output of this recursive program

我们有这个递归 python 程序:

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,5,7,9,11

但实际输出是:

1,3,6,10,15,21

有人可以解释一下背后的原因吗? 这是我的理解程序将启动为

k as 6, then 6 > 0 then system will call tri_recusrion(6-1) 
now k is 5, then 5 > 0 then system will call tri_recusrion(5-1) 
now k is 4, then 4 > 0 then system will call tri_recusrion(4-1) 
now k is 5, then 3 > 0 then system will call tri_recusrion(3-1) 
now k is 2, then 2 > 0 then system will call tri_recusrion(2-1) 
now k is 1, then 1 > 0 then system will call tri_recusrion(1-1) 
now k is 0, then 0 !> 0 condition will break

now function will start to return in reverse order:
tri_recusrion(1-1) in this case k is 1; k + (1-1) prints 1
tri_recusrion(2-1) in this case k is 2; k + (2-1) prints 3
tri_recusrion(3-1) in this case k is 3; k + (3-1) prints 5
tri_recusrion(4-1) in this case k is 4; k + (4-1) prints 7
tri_recusrion(5-1) in this case k is 5; k + (5-1) prints 9
tri_recusrion(6-1) in this case k is 6; k + (6-1) prints 11

函数每次自己调用时,都会将k的当前值加到result上。您正在打印的当前列表是 1, 1+2, 1+2+3, 1+2+3+4, ...,也是 1, 3, 6, 10, ...。要修复错误,请分别写 result = 1result = 2 + tri_recursion(k - 1) 而不是 result = 0result = k + ...

先解释一下这个函数的作用:

k是函数的参数,基本条件是当k为0时,结果为0且什么都不打印,函数只是returns 0

如果 k 大于 0,程序计算 tri_recursion(k-1),将其添加到 k 并打印,然后 returns它

如果我们用参数 k=6 调用函数,它会用 k=5 调用同一个函数,然后它用 k=4 做同样的事情...最后用k=0 程序将停止调用自身。在那之后,计算结果将被传送到调用前一级以完成该调用。

因此,程序到达k=0后立即执行的步骤如下。

由于 k=0 returns 0k=1 的结果变为 k + 0 => 1 + 0,打印 1 和returns它

由于 k=1 returns 1k=2 的结果变为 k + 1 => 2 + 1,打印 3 和returns它

由于 k=2 returns 3k=3 的结果变为 k + 3 => 3 + 3,打印 6 和returns它

由于 k=3 returns 6k=4 的结果变为 k + 6 => 4 + 6,打印 10 和returns它

因为 k=4 returns 10k=5 的结果变成 k + 10 => 5 + 10,打印 15 和returns它

由于 k=5 returns 15k=6 的结果变为 k + 15 => 6 + 15,打印 21 和returns它

下面是代码中每个递归调用中带有 args 和 return 值的调用图的可视化。

您可以点击这个优秀的 in-browser python recursion visualizer.

的逐步进展