斐波那契序列。时间复杂度

时间:2017-04-09 17:27:14

标签: recursion time-complexity fibonacci

首先 - 是的,我知道有很多类似的问题,但我仍然没有得到它。

所以这段代码的Big-O表示法是O(2 ^ n)

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

即使我使用让他们说 6 来运行它,功能也会被称为 25 次,如下图所示:

Fibonacci 由于O(2 ^ 6)= 64,不应该 64

1 个答案:

答案 0 :(得分:1)

这里的逻辑几乎没有问题:

  1. 大O符号只给出了上限渐近,而不是一个紧束缚,big Theta是什么。
  2. Fibonacci实际上是Theta(phi^n),如果您正在寻找更严格的约束(其中phi是&#34;黄金口粮&#34;,phi ~= 1.618
  3. 在谈论渐近符号时,谈论低数字并忽略常数并没有多大意义 - 因为它们因渐近复杂性而被省略(虽然这不是这种情况)。
  4. 在这里,问题是斐波纳契确实是O(2^n),但是这个界限并不紧张,所以实际的呼叫数量将低于估计的数量(对于足够大的n,起)。