【问题标题】:What is the space complexity of a recursive fibonacci algorithm without considering stack calls?不考虑堆栈调用的递归斐波那契算法的空间复杂度是多少?
【发布时间】:2020-03-20 06:23:53
【问题描述】:

如果我们不考虑堆栈调用内存,那么递归 fibnonacci 消耗的空间是多少?

我读了here,上面写着 0(N),但我很困惑在考虑空间时是否应该包括堆栈内存。

伪代码:

int Fibonacci(int n)
{
   if ( n == 0 )
      return 0;
   else if ( n == 1 )
      return 1;
   else
      return ( Fibonacci(n-1) + Fibonacci(n-2) );
} 

【问题讨论】:

  • 哪种递归斐波那契算法?我知道至少有两个,可能还有更多。
  • 您应该在问题中包含此内容。甚至作为伪代码。
  • 是否考虑堆栈内存取决于您。我会说因为堆栈上使用的内存也是使用过的内存,所以我为什么不计算在内。
  • 您链接到的 sn-p 中的所有分配都在堆栈上。

标签: algorithm recursion time-complexity space-complexity


【解决方案1】:

在不考虑堆栈调用内存的情况下,这又是 O(n),因为您正在传递一个变量,该变量的副本是在新函数调用中创建的,并且这在 n 个函数中发生 n 次,因为递归树的最大高度在任何时候都是n 或最大级别是 n + 1,所以我们可以渐近地说它是 O(n)。

如果再次使用自下而上的方法,我们使用数组来存储过去的值,这样也变成了 O(n) 空间(但以一种聪明的方式,我们可以让自下而上的方法只使用 3 个可以考虑的变量作为 O(1) 空间)。

【讨论】:

    猜你喜欢
    • 2015-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-28
    • 2012-05-06
    • 2023-03-07
    • 2011-03-24
    • 1970-01-01
    相关资源
    最近更新 更多