斐波那契递归函数的实时复杂度是多少

问题描述 投票:0回答:1

我很困惑斐波那契函数的复杂度是2^n还是黄金比例的n次方。

“我注意到很多网站都说这个递归的复杂度是 2 的 n 次方。”

recursion fibonacci mat
1个回答
0
投票

我们用这个伪代码来计算𝐹𝑛

function F(n):
    if n < 2:
        return n  ' F(0) = 0, F(1) = 1
    return F(n-1) + F(n-2)

我们将计算 𝐹𝑛 所需的初等运算(复杂度为 O(1))的数量称为 𝑇𝑛

然后我们有常数 𝐴 和 𝐵 使得:

  • 𝑇0=𝐴
  • 𝑇1 = 𝐴
  • 𝑇𝑛 = 𝑇𝑛−1 + 𝑇𝑛−2 + 𝐵

这里我们将加法视为常数时间运算。

我们可以看到这个序列:

  • 𝑇2 = 2𝐴 + 𝐵 = 2(𝐴+𝐵) − 𝐵
  • 𝑇3 = 3𝐴 + 2𝐵 = 3(𝐴+𝐵) − 𝐵
  • 𝑇4 = 5𝐴 + 4𝐵 = 5(𝐴+𝐵) − 𝐵
  • ...
  • 𝑇𝑛 = 𝐹𝑛+1(𝐴+𝐵) − 𝐵 = θ(𝐹𝑛+1)

由于 𝐹𝑛 = θ(φ𝑛),我们有:

𝑇𝑛 = θ(Φ𝑛+1) = θ(Φ𝑛)

对于 Big O,我们无法通过更改幂运算的 base 来获得等效表达式。 关于大 O 表示法的维基百科警告了这一点:

另一方面,不同底数的指数的阶数不同。例如,2𝑛 和 3𝑛 的阶数不同。

所以我们不能说 𝑇𝑛 = θ(2𝑛),因为 φ 不是 2,而是 1.618...

© www.soinside.com 2019 - 2024. All rights reserved.