我试图了解总值的存储位置,例如该函数的返回值是 int15。输入列表中的每个数字都会被取出,一次添加一个,然后从列表中删除,但我看不到临时值存储在哪里,我只能得到完整的总数?
另外关于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)
Run Code Online (Sandbox Code Playgroud)
返回
[1, 2, 3, 4, 5]
[2, 3, 4, 5]
[3, 4, 5]
[4, 5]
[5]
[]
Total = 15
Run Code Online (Sandbox Code Playgroud)
中间运行总计永远不会“存储”在变量中 - 每次递归调用之一返回时,它们都会沿着调用堆栈传递:
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。我有一个交互式演示,它展示了如何使用调用堆栈逐步计算一些递归函数。它可以帮助您了解递归函数是如何执行的。