首页 > 解决方案 > Python中的return关键字是否将具有特定参数的函数的值保存在内存中?

问题描述

我正在学习递归函数,我有一个疑问,让我们说:

def fibonacci(n):
if n == 0 or n == 1:
    return 1

return fibonacci(n-1) + fibonacci(n-2)

fibonacci(4)
fibonacci(5)

当程序执行fibonacci(5)时,就像:

fibonacci(5) = fibonacci(4) + fibonacci(3)

Python是否必须使用递归再次计算最后两个函数,或者它是否已经将结果保存在内存中,因为它在执行时已经使用相同的参数执行了相同的函数,fibonacci(4)因此会立即为它们分配它们的值?

标签: pythonfunctionrecursionmemoryreturn-value

解决方案


首先,Python 中的函数调用没有自动缓存。如果您调用fibonacci(6)and then fibonacci(5),Python 将再次调用所有关联的函数,即使它是多余的。

您所说的(缓存等)称为记忆化,是称为动态编程的更大概念的基本原则。DP 基本上是一种采用基本递归(如您的斐波那契实现)并通过应用一些技术(如缓存)使其更高效的方法

这是一个很好的网站,它很好地解释了这个概念,实际上以斐波那契数列为例。什么是动态规划


推荐阅读