【发布时间】:2015-04-29 15:10:37
【问题描述】:
这是Cracking the Coding Interview(第5版)中斐波那契数列的递归实现
int fibonacci(int i) {
if(i == 0) return 0;
if(i == 1) return 1;
return fibonacci(i-1) + fibonaci(i-2);
}
看了这个算法时间复杂度的视频Fibonacci Time Complexity,我现在明白了为什么这个算法运行在O(2n)。但是,我正在努力分析空间复杂性。
我上网查了一下,对此有疑问。
在这个 Quora 帖子中,作者指出“在你的情况下,你有 n 个堆栈帧 f(n)、f(n-1)、f(n-2)、...、f(1) 和奥(1)”。你不会有 2n 个堆栈帧吗?说 f(n-2) 一帧将用于实际调用 f(n-2) 但不会还有来自 f(n-1) 的调用 f(n-2) 吗?
【问题讨论】:
-
常数因素在大 O 复杂度中并不重要—— O(n) 和 O(2n) 是相同的。也就是说,在第一次调用返回后,堆栈帧将被回收并重用于第二次调用。
-
这是 LaTeX 数学符号,2 的 n 次方吗?你的意思是 2 倍 n 吗?
-
@chrislott 你能对数学 jax 进行编辑吗?我的意思是 2 的幂 n
-
@ChrisDodd 所以在计算机中,有一个 f(n-2) 的堆栈帧,并且因为有两次调用而被使用了两次?
-
@committedandroider:您可以编辑自己的帖子。 StackOverflow 上没有 MathJax,所以你必须用 HTML 来做。
标签: java algorithm recursion time-complexity space-complexity