如何证明斐波那契数列的时间复杂度为O(n)

时间:2018-09-26 10:52:32

标签: time-complexity fibonacci

在下面的代码中,我知道时间复杂度为O(n),但是如何以正确的方式证明它呢? 是说搜索数组足够O(n)吗?

int f[N];
F(n)
{
    if (f[n] >= 0) return f[n];
    f[n] = F(n-1) + F(n-2);
    return f[n];
}

int main()
{
    read n;
    f[0] = 0; f[1] = 1;
    for (i = 2; i <= n; i++)
        f[i] = -1;
    print F(n);
}

1 个答案:

答案 0 :(得分:0)

对于数组的每个元素,您都调用F。对您来说,这似乎是递归的,但实现不好。实际上,每个f [n-1]和f [n-2]调用都只返回值。

您将有3n次呼叫F(n),因此仍然是O(n)。

如果您不必递归,则可以使用单个循环对其进行编程。