我试图了解总值的存储位置,例如此函数的返回值是int 15
。输入列表中的每个数字一次被获取并添加一个,然后从列表中删除,但是我看不到temp值存储在什么地方,我只能得到完整的总数吗?
同样关于return L[0] + mysum(L[1:])
如果mysum(L[1:])
存储列表,如何将其与L[0]
相加,如果mysum(L[1:])
不存储列表,则列表不会丢失,那么程序肯定不会知道什么数字添加下一个?
码
def mysum(L):
print(L) # Trace recursive levels
if not L: # L shorter at each level
return 0
else:
return L[0] + mysum(L[1:])
total = mysum([1, 2, 3, 4, 5])
print("Total = ", total)
返回
[1, 2, 3, 4, 5]
[2, 3, 4, 5]
[3, 4, 5]
[4, 5]
[5]
[]
Total = 15
最佳答案
中间运行总计永远不会“存储”在变量中-每次递归调用之一返回时,它们都会沿调用堆栈传递:
返回的第一个递归调用是mysum([])
,它返回数字0。
此后,递归调用mysum([5])
返回5 + 0 = 5。
此后,递归调用mysum([4,5])
返回4 + 5 = 9。
然后,递归调用mysum([3,4,5])
返回3 + 9 = 12。
然后mysum([2,3,4,5])
返回2 + 12 = 14。
最后,原始的非递归调用mysum([1,2,3,4,5])
返回1 + 14 = 15。
我有an interactive demo,它显示了如何使用调用堆栈逐步计算某些递归函数。它可以帮助您了解递归函数的执行方式。