斐波那契数列数列的三种实现方法

   日期:2020-09-25     浏览:87    评论:0    
核心提示:1. 效率很低的解法:public static long fibonacci1(int n) { if (n <= 0) return 0; if (n == 1) return 1; return fibonacci1(n-1) + fibonacci1(n-2); }缺点:递归求解的过程中,有很多的节点是重复的,而且重复的节点数会随着n的增大而急剧增加,这就意味着计算量会随着n的增大而急剧增大。2. 避免重复节点的方法从下往上计算

1. 效率很低的解法

public static long fibonacci1(int n) { 
        if (n <= 0) return 0;
        if (n == 1) return 1;
        return fibonacci1(n-1) + fibonacci1(n-2);
    }

缺点:递归求解的过程中,有很多的节点是重复的,而且重复的节点数会随着n的增大而急剧增加,这就意味着计算量会随着n的增大而急剧增大。

2. 避免重复节点的方法

从下往上计算,首先根据f(0)和f(1)算出f(2),f(1)和f(2)算出f(3)···以此类推就可以算出第n项了,时间复杂度是O(n)。

public static long fibonacci2(int n) { 
        if (n == 1 || n == 2) return  1;
        long fibNMinusOne = 1;  // 用来记录计算项的前面的前面的数
        long fibNMinusTwo = 1;  // 用来记录当前计算项的前一项
        long fibN = 0;          //用来记录结果
        for (int i = 2; i < n; i++) { 
            fibN = fibNMinusOne + fibNMinusTwo;
            fibNMinusTwo = fibNMinusOne;
            fibNMinusOne = fibN;
        }
        return fibN;
    }

3.时间复杂度为O(logn)但不够实用的解法

    public static int fibonacci3(int n) { 
        if (n == 0) return 1;
        if (n == 1) return 1;
        //n为偶数
        if (n % 2 == 0) return fibonacci3(n / 2) * fibonacci3(n / 2) + fibonacci3(n / 2 - 1) * fibonacci3(n / 2 - 1);
        //n为奇数
        else return fibonacci3(n / 2) * fibonacci3(n / 2 + 1) + fibonacci3(n / 2 - 1) * fibonacci3(n / 2);
    }
 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服