Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么这个python递归函数会按照它的顺序返回值?_Python_Recursion - Fatal编程技术网

为什么这个python递归函数会按照它的顺序返回值?

为什么这个python递归函数会按照它的顺序返回值?,python,recursion,Python,Recursion,看看下面的递归函数,当运行时,它会打印出来 递归示例结果 1 3 6 10 15 21 为什么它从1开始,然后上升到21,当然应该是相反的 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") tr

看看下面的递归函数,当运行时,它会打印出来

递归示例结果

1
3
6
10
15
21
为什么它从1开始,然后上升到21,当然应该是相反的

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)
请注意,上面的示例来自W3学校

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)
在上面提供的代码中,您在函数调用后给出了print语句,该语句已被清除

因此,基本上递归将一直进行,直到
k
变量大于零

但是在
k
变为零的情况下,执行else条件,并将零的返回给递归父级

其中,
result=1+0
变为1。
print语句给出了答案1。

似乎没有任何相反的理由,因为
print(result)
是在递归调用函数之后编写的。这一行
result=k+tri_递归(k-1)
将在我们得到
k=0
后结束,此时我们得到
result=1
(k=1,递归函数返回0,即1+0=1)。在堆栈中,我们的结果值为[1,3,6,10,15,21],它从磁头打印,因此上述序列完全有意义。

除去实现,递归定义可以用数学形式写成:

f(k)=k+f(k-1)
用实际的话来说,第k步的值需要第k-1步的值

因此,要完成第二步(打印3),必须先完成第一步(打印1)。同样,要完成第三步(打印6),必须先完成第二步,然后才能完成第一步

或者一般来说,要计算
f(k)
必须首先计算
f(k-1)
,首先计算
f(k-2)
,…,首先计算
f(1)

在实际实现中,观察在当前值
k+tri\u递归(k-1)
之前如何完全计算前面的值
k+tri\u递归(k-1)

v完全计算f(k-1) 结果=k+tri_递归(k-1) #在*递归到f(k-1),f(k-2),…,f(1)之后打印* 打印(结果)
为什么你认为应该反过来?对
print(result)
的调用是在递归调用之后进行的。这很有帮助,递归必须在转到print?之前完成。为
tri\u递归(k)
计算
k+tri\u递归(k-1)
需要在使用其值之前完成
tri\u递归(k-1)