Algorithm 斐波那契序列递归空间复杂度
我不明白为什么上面代码的空间复杂度是O(n)。 现在,我知道递归的深度是Algorithm 斐波那契序列递归空间复杂度,algorithm,recursion,space-complexity,Algorithm,Recursion,Space Complexity,我不明白为什么上面代码的空间复杂度是O(n)。 现在,我知道递归的深度是n,也就是树的高度 没有创建临时变量或最终结果变量。这里的空间复杂度是根据函数调用堆栈计算的吗?是的,这种情况下的空间复杂度取决于调用堆栈中使用的空间,这取决于活动函数调用的数量(函数已调用但未完成执行) 如果你遵守最后一句话 public int fib(int n) { if (n == 0) return 0; if (n == 1) return 1; return fib(n-1) + fib(n-2); }
n
,也就是树的高度
没有创建临时变量或最终结果变量。这里的空间复杂度是根据函数调用堆栈计算的吗?是的,这种情况下的空间复杂度取决于调用堆栈中使用的空间,这取决于活动函数调用的数量(函数已调用但未完成执行) 如果你遵守最后一句话
public int fib(int n) {
if (n == 0) return 0;
if (n == 1) return 1;
return fib(n-1) + fib(n-2);
}
计算fib(n-1)
时,使用O(n)
空格。一旦fib(n-1)
完成,执行堆栈空间可以被fib(n-2)
重用
因此,在这种情况下,调用fib(n)
的任何时间的活动堆栈帧的数目是O(n)
,因此空间复杂度是O(n)
然而,值得注意的是,时间复杂度是指数级的
return fib(n-1) + fib(n-2)