python - 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)
因此会立即为它们分配它们的值?
解决方案
首先,Python 中的函数调用没有自动缓存。如果您调用fibonacci(6)
and then fibonacci(5)
,Python 将再次调用所有关联的函数,即使它是多余的。
您所说的(缓存等)称为记忆化,是称为动态编程的更大概念的基本原则。DP 基本上是一种采用基本递归(如您的斐波那契实现)并通过应用一些技术(如缓存)使其更高效的方法
这是一个很好的网站,它很好地解释了这个概念,实际上以斐波那契数列为例。什么是动态规划
推荐阅读
- angular - 通过调用component2中的函数来处理component1.onClick。不是父/子组件。Angular 5 和 Rxjs
- javascript - 多人 html5 游戏中的 Lance.gg 不同步
- angular - Bazel 执行的 java 应用程序引擎进程不会在 docker 中与外部通信
- angular - (加载)和(错误)在img元素angular4上被多次调用
- python-idle - 在 Python IDLE 中换行
- excel - Excel 链接到共享驱动器上的彭博实时数据
- javascript - 更改元素:使用 Vanilla JavaScript 根据单独元素的 textContent 更改内容
- node.js - 是否可以将全栈节点反应应用程序部署到 go-daddy 子域?
- node.js - Can't fire my npm poststart script b/c start script is to start a node server and will not exit
- android - How to Trigger a Scroll Behavior on a Toolbar inside a CoordinatorLayout