为什么这个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)
。