2024-04-25 10:16:38 发布
网友
我是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(2)
有人能帮我解释一下上面的代码吗上面函数的输出是13。你知道吗
听起来像是在问为什么函数打印1和3,而不是为什么返回3。你知道吗
1
3
每个参数大于零的函数调用都会打印一些内容。你知道吗
当您用2调用它时,这将导致tri_recursion(1)调用,这将导致tri_recursion(0)
2
tri_recursion(1)
tri_recursion(0)
调用tri_recursion(0)将不打印任何内容,并返回0 调用tri_recursion(1)会导致1被打印(1 + tri_recursion(0)),并返回1。 调用tri_recursion(2)会导致3被打印(2 + tri_recursion(1)),并返回3
0
1 + tri_recursion(0)
tri_recursion(2)
2 + tri_recursion(1)
最后你会得到一个3的回报,并打印1和3。你知道吗
打印的顺序是这样的,因为每个函数必须在调用它的函数继续之前返回。所以在tri_recursion(2)可以打印任何tri_recursion(1)必须返回的内容之前,但是在tri_recursion(1)返回之前,它会打印。这通常称为“展开”递归。你知道吗
在第一个值k=2时。 很明显,2大于0。所以“如果”块将运行。 现在将执行2+tri\u递归(1)。你知道吗
triu递归(1)也用同样的方法计算。所以它的值是1。你知道吗
当k=0时递归停止
所以答案是2+1等于3
听起来像是在问为什么函数打印
1
和3
,而不是为什么返回3
。你知道吗每个参数大于零的函数调用都会打印一些内容。你知道吗
当您用
2
调用它时,这将导致tri_recursion(1)
调用,这将导致tri_recursion(0)
调用
tri_recursion(0)
将不打印任何内容,并返回0
调用
tri_recursion(1)
会导致1
被打印(1 + tri_recursion(0)
),并返回1
。调用
tri_recursion(2)
会导致3
被打印(2 + tri_recursion(1)
),并返回3
最后你会得到一个
3
的回报,并打印1
和3
。你知道吗打印的顺序是这样的,因为每个函数必须在调用它的函数继续之前返回。所以在
tri_recursion(2)
可以打印任何tri_recursion(1)
必须返回的内容之前,但是在tri_recursion(1)
返回之前,它会打印。这通常称为“展开”递归。你知道吗在第一个值k=2时。 很明显,2大于0。所以“如果”块将运行。 现在将执行2+tri\u递归(1)。你知道吗
triu递归(1)也用同样的方法计算。所以它的值是1。你知道吗
当k=0时递归停止
所以答案是2+1等于3
相关问题 更多 >
编程相关推荐