【问题标题】:Fibonacci sequence recursion space complexity [duplicate]斐波那契数列递归空间复杂度
【发布时间】:2018-06-05 14:19:32
【问题描述】:
public int fib(int n) {
if (n == 0) return 0; 
if (n == 1) return 1; 
return fib(n-1) + fib(n-2);
}

我很困惑为什么上面代码的空间复杂度是 O(n)。 现在,我知道递归的深度是n,也就是树的高度。

没有创建临时变量或最终结果变量。这里的空间复杂度是根据函数调用栈计算的吗?

【问题讨论】:

    标签: algorithm recursion space-complexity


    【解决方案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)。

    值得注意的是,时间复杂度是指数级的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-29
      • 1970-01-01
      • 2011-11-28
      相关资源
      最近更新 更多