Java基础

算法:斐波那契数列(java实现)

2020-03-13  本文已影响0人  Merbng

斐波那契数列

由于斐波那契数列是以兔子的繁殖引入的,因此也叫“兔子数列”,它指的是这样一个数列:0,1,1,2,3,5,8,13...从这组数列可以明显看出这样一个规律:从第三个数开始,后边一个数一定是在其之前两个数的和,在数学上,斐波那契数列可以以这样的公式表示:
F(0)=0, F(1)=1, F(n)=F(n-1)+F(n-2),(n>=2)

实现方式1:递归

既然该数列已经有这样一个规律:F(n)=F(n-1)+F(n-2);那么我们可以用递归的方法,这样的代码比较简洁

 long fbnq1(long num) {
        if (num == 1 || num == 0) {
            return num;
        }
        return fbnq1(num - 1) + fbnq1(num - 2);
    }

    //也可以这样写
    long fbnq(long n) {
        return n < 2 ? n : fbnq(n - 1) + fbnq(n - 2);
    }

这样的递归算法虽然只有简单的几行,但是效率却很低,其时间复杂度为 O(n^2)

实现方式2:非递归

如果在时间复杂度和空间复杂度都有要求的话,我们可以使用非递归的算法来实现

    long[] fbnq4Array(long n) {
        long[] array = new long[(int) (n + 1)];
        array[0] = 0;
        array[1] = 1;
        for (int i = 2; i <= n; i++) {
            array[i] = array[i - 1] + array[i - 2];
        }
        return array;
    }
    long fbnq3(long n) {
        long first = 1;
        long second = 1;
        long third = 0;
        for (int i = 3; i <= n; i++) {
            third = first + second;
            first = second;
            second = third;
        }
        return third;
    }

参考链接:

上一篇 下一篇

猜你喜欢

热点阅读