剑指offer

09_斐波那契数列

2020-05-18  本文已影响0人  是新来的啊强呀

要求:大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0,第1项是1)。n<=39
分析:斐波那契数列的标准公式为:F(1)=1,F(2)=1, F(n)=F(n-1)+F(n-2)(n>=3,n∈N*)
方法一:递归法,直接根据公式写出,时间复杂度:O(2^n),空间复杂度:O(1)
方法二:我们可以将递推式的求解从自顶向下改为自底向上(循环实现)。简而言之,我们已知前两项的值,然后我们就可以用前两项的值求出第3项的值,接着求第4、第5、……,直到求出第n项的值。时间复杂度和空间复杂度:O(n)、O(n)

// 方法一,递归法
public int Fibonacci(int n) { 
    // 退出条件
    if (n == 0) return 0;
    if (n == 1) return 1;
    return Fibonacci(n-1) + Fibonacci(n-2); 
}

// 方法二,递归会重复计算大量相同数据,我们用个数组把结果存起来
public static int[] Fibonacci(int n){
        int[] f = new int[n];
        f[0] = 0;
        f[1] = 1;
        for(int i = 2;i<n;i++){
            f[i] = f[i-1] +f[i-2];
        }
        return f;
    }
上一篇下一篇

猜你喜欢

热点阅读