Python 中的 return 关键字是否将具有特定参数的函数的值保存在内存中?
Does return keyword in Python saves the value in memory for a function with an specific parameter?
我正在学习递归函数,我有一个疑问,比方说:
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)
所以会立即给它们赋值吗?
首先,Python 中没有函数调用的自动缓存。如果您调用 fibonacci(6)
然后 fibonacci(5)
,Python 将再次调用所有相关函数,即使它是多余的。
您所说的(缓存等)称为 memoization 并且是称为动态规划的更大概念的基本原则。 DP 基本上是一种采用基本递归(如斐波那契实现)并通过应用某些技术(如缓存)使其更高效的方法
这是一个很好的网站,它很好地解释了这个概念,并且实际上以斐波那契数列为例。 What is Dynamic Programming
我正在学习递归函数,我有一个疑问,比方说:
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)
所以会立即给它们赋值吗?
首先,Python 中没有函数调用的自动缓存。如果您调用 fibonacci(6)
然后 fibonacci(5)
,Python 将再次调用所有相关函数,即使它是多余的。
您所说的(缓存等)称为 memoization 并且是称为动态规划的更大概念的基本原则。 DP 基本上是一种采用基本递归(如斐波那契实现)并通过应用某些技术(如缓存)使其更高效的方法
这是一个很好的网站,它很好地解释了这个概念,并且实际上以斐波那契数列为例。 What is Dynamic Programming