首页 > 解决方案 > 了解总值存储在递归函数中的位置 - Python

问题描述

我试图了解总值的存储位置,例如此函数的返回是 int 15。输入列表中的每个数字都被取出并一次添加一个并从列表中删除,但我看不到临时值的存储位置我只能得到完整的总数?

另外关于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

标签: pythonrecursion

解决方案


中间运行总数永远不会“存储”在变量中 - 每次递归调用之一返回时,它们都会向下传递到调用堆栈:

  • 返回的第一个递归调用是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。

我有一个交互式演示,它展示了如何使用调用堆栈逐步计算一些递归函数。它可以帮助您了解递归函数是如何执行的。


推荐阅读