【发布时间】:2015-12-04 13:42:15
【问题描述】:
谁能解释下面的代码是如何工作的。该代码是作为返回第 n 个斐波那契数的函数的快速递归实现给出的。我对递归函数的工作原理有一个大致的了解。我可以完全理解这种函数的直接递归实现,使用斐波那契数的定义,但是效率不高。 我无法理解的主要事情是当我们将垃圾存储在 prev0 中时 fib(n – 1, prev0) 会返回什么。
int fib(int n, int &prev1) {
if (n < 2) {
prev1 = 0;
return n;
}
int prev0;
prev1 = fib(n – 1, prev0);
return prev0 + prev1;
}
我是初学者,所以,请尽可能具体。
【问题讨论】:
-
为什么你认为代码不应该工作?
-
您有什么特别不明白的地方?请详细说明您的问题。
-
这个函数很快,因为它只在一个路径上递归。
-
代码应该可以工作(这不是我写的),我只是无法掌握它背后的算法。我确实理解一般的想法,它试图保存一些斐波那契数,以进一步使用它们而不是重新计算,就像简单的递归实现一样@CaptainObvlious
-
@Bathsheba 不幸的是,没有。它不会立即返回调用的返回值,而是执行后续添加。
标签: c++ algorithm recursion fibonacci