剑指offer_5_斐波那契数列

2020-01-20  本文已影响0人  韩who

斐波那契数列

大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。
n<=39

第一种

最容易想到的方式:

使用递归的方式,自底向上

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

优化思路:

一:使用数组存储

优化,我们使用数组来存,但是效果不明显

public class Solution {
    
    int[] arr = new int[40];
    public int Fibonacci(int n) {
         
        if(n == 0){
            return 0;
        }
        if(n==1){
            return 1;
        }
         
        arr[n]  =  Fibonacci(n-1)+Fibonacci(n-2);
        return arr[n];
        
    }
}

优化思路二:

非递归,使用循环方式,每次存储n-1以及n-的值,值存储需要用到的值,那么就可以进行计算

考虑到每一次只存储n-1以及 n-2个数,所以可以只存储前一次计算的前两个值

public class Solution {
 
    public int Fibonacci(int n) {      
        if(n == 0){
            return 0;
        }
        if(n==1){
            return 1;
        }
        
        int a=0,b=1,c=0;
        //a 代表n-2的值,b 代表n-1的值
        for(int i = 2 ; i<=n ;i++){
            c = a+b;
            a = b;
            b = c;           
        }     
        return c;
        
    }
}
上一篇下一篇

猜你喜欢

热点阅读