程序员

剑指offer----斐波那契数列

2018-02-01  本文已影响0人  qming_c

题目:大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项。

n<=39
最基础的计算机算法,实现起来,一般情况下有两种选择,递归and迭代

递归版本

public class Solution {
    public int Fibonacci(int n) {
        if(n <= 1){
            return n;
        }
        return Fibonacci(n - 1) + Fibonacci(n - 2);
    }
}

由于使用有大量的函数调用,深度也比较大,并且很多重复运算,所以时间复杂度比较高
斐波那契数列的每一个数字都是与之前两个相关的,所以,以此为入手点,使用迭代,与简单递归相比省去很多的时间。

public class Solution {
    public int Fibonacci(int n) {
        if(n <= 1){
            return n;
        }
        int[] a = {0, 1};
        int sum = 0;
        for(int i = 2; i <= n; i++){
            sum = a[0] + a[1];
            a[0] = a [1] ;
            a[1] = sum;
        }
         return sum;
    }
}
public class Solution {
    public int Fibonacci(int n) {
        if(n <= 1){
            return n;
        }
        int[] a = {0, 1};
        while(n-- >= 2){
            a[1] += a[0] ;
            a[0] = a[1] - a[0];
        }
         return a[1];
    }
}

上面两种方法都是一样的,第二种方法做了一些优化,减少了一个临时变量sum
省了一点点空间
但是我上面的方法为了较好的理解都是用了数组来实现,如果改成普通的int来存储会更加节省空间。


image.png
上一篇下一篇

猜你喜欢

热点阅读