我试图了解递归函数。我想知道答案是如何逐步提供的
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
答案 0 :(得分:1)
该函数计算0到n之间所有数字的总和,并打印中间结果。第一个1是0 + 1,3 = 0 + 1 + 2,6 = 0 + 1 + 2 + 3,10 = 0 + 1 + 2 + 3 + 4,...
要了解递归函数,您需要注意两点:递归调用是如何完成的,以及递归何时停止。
递归调用由result = k+tri_recursion(k-1)
给出,递归在k <= 0
时停止并返回0。因此,如果我们仅假设正数,则可以这样描述tri_recursion:
tri_recursion(k) = k + tri_recursion(k-1) if k > 0
tri_recursion(0) = 0
所以tri_recursion(k) = k + tri_recursion(k-1) = k + (k-1) + tri_recursion(k-2) = k + (k-1) + (k-2) + tri_recursion(k-3) ... = k + (k-1) + (k-2) + ... + 0
所以tri_recursion(k)
是0到k之间所有数字的总和。
请注意,0和k之间所有数字的总和等于k*(k+1) / 2
,所以tri_recursion(6) = 6 * 7 / 2 = 21