python - 带有递归调用的 return 语句如何在 Python 中保存中间值?

标签 python recursion return-value

正在审查一些与递归调用相关的 python 代码,并注意到 return 语句看起来很有趣。当下一次递归调用的返回语句中没有变量赋值时,递归如何进行?

在进行递归调用时,中间求和值没有存储在明显的位置。调试器似乎显示列表每次调用都减少一个,但我只是不明白中间值存储在哪里。

另一件有趣的事情是,调试器似乎会在最后一次调用完成后对这些值进行最后一次迭代。使用 PyCharm,但不确定这是否重要。

return 语句如何在以下递归的递归调用期间保存求和值?

def sum_list(list_of_num):
    if len(list_of_num) == 1:
        return list_of_num[0]
    else:
        return list_of_num[0] + sum_list(list_of_num[1:])

print(sum_list([4,6,7,3,7,3,2]))

最佳答案

该函数将值返回给调用堆栈中更高层的调用,为什么您认为它需要一个变量,例如进行简单的递归调用:

def r(n):
    if n == 0:
         return 0
    return 1 + r(n-1)

然后调用堆栈看起来像:

r(3):
    return 1 + r(2)
    r(2):
        return 1 + r(1)
        r(1):
            return 1 + r(0)
            r(0):
                return 0

因此,当您展开调用堆栈时,您会得到:

r(3):
    return 1 + r(2)
    r(2):
        return 1 + r(1)
        r(1):
            return 1 + 0
--
r(3):
    return 1 + r(2)
    r(2):
        return 1 + 1
--
r(3):
    return 1 + 2
--
3

关于python - 带有递归调用的 return 语句如何在 Python 中保存中间值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45766736/

相关文章:

c# - finally 之前的 return 语句

sql-server - sql过程中返回值为null

python - 分割成 block 后如何合并图像

python - 在 Python 中缓存类属性

recursion - Lisp 递归返回 NIL

recursion - prolog 中列表的解压

c - 如何将此数组作为字符串返回?

python - python 中的 URL 记录器

python - 有效删除不同行之间包含重复元素的行

java - 多线程和递归一起