斐波那契数列算法复杂度计算过程

1. 求该方法的时间复杂度

long aFunc(int n) {
    if (n <= 1) {
        return 1;
    } else {
        return aFunc(n - 1) + aFunc(n - 2);
    }
}

参考答案:
显然运行次数,T(0) = T(1) = 1,同时 T(n) = T(n - 1) + T(n - 2) + 1,这里的 1 是其中的加法算一次执行。
显然 T(n) = T(n - 1) + T(n - 2) 是一个斐波那契数列,通过归纳证明法可以证明,当 n >= 1 时 T(n) < (5/3)^n,同时当 n > 4 时 T(n) >= (3/2)^n。
所以该方法的时间复杂度可以表示为 O((5/3)^n),简化后为 O(2^n)。
可见这个方法所需的运行时间是以指数的速度增长的。如果大家感兴趣,可以试下分别用 1,10,100 的输入大小来测试下算法的运行时间,相信大家会感受到时间复杂度的无穷魅力

注: 赋值为1个算法复杂度,加减乘除为1个算法复杂度。 
2. 斐波那契数列也可以用矩阵乘法来将时间复杂度压缩到log(n). 假设A为要乘的矩阵, 大概有n-2个, 例如两个矩阵乘过后再自乘 为4个,再自乘为8个,直到达到n-2g个为止,所以时间复杂度为log(n)。 
作者:raymondCaptain
链接:https://www.jianshu.com/p/f4cca5ce055a
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

你可能感兴趣的:(斐波那契数列算法复杂度计算过程)