如何估计第n个元素的Fibonacci递归算法的时间?

时间:2013-09-21 14:42:16

标签: java algorithm

如何估算Nth Fibonacci元素的后续算法的完成时间?

private static double fib(double nth){

        if (nth <= 2) return 1;
        else return fib(nth - 1) + fib(nth - 2);
    }

1 个答案:

答案 0 :(得分:2)

此算法的精确时间复杂度为...... O(F(n)),其中F(N)为第n个Fibonacci数。为什么?请参阅下面的说明。

让我们通过归纳来证明这一点。显然它适用于基本情况(一切都是常数)。为什么它适用于F(N)?我们将算法复杂度函数表示为T(N)。然后是T(N) = T(N-2) + T(N-1),因为你进行了2次递归调用 - 一次参数减少了1,一次减少了2.而这个时间复杂度恰好是斐波纳契数。

所以F(N)是您可以做出的最佳估算,但您也可以说O(2^n)或更精确地O(phi^n) phi = (1 + sqrt(5)) / 2 ~= 1.61。为什么?因为第n个斐波纳契数几乎等于phi ^ n

此边界使您的算法非多项式,对于大于30周围的数字的数字非常慢。你应该考虑其他好的算法 - 这个问题有许多已知的对数算法。