1. 程式人生 > >計算第n個斐波那契數

計算第n個斐波那契數

斐波那契數列

n>1,F(n)=F(n-1)+F(n-2); F(0)=0; F(1)=1; 求第n個斐波那契數

  1. 遞迴法

利用已知的斐波那契數的遞推公式即可


public class Fibonacci {
    public static int getFib(int n){
        if(n==0)
            return  0;
        else if(n==1)
            return 1;
        else
            return getFib(n-1)+getFib(n-2);

    }
    public static  void  main(String[]agrs){
        int n=10;
        System.out.println(getFib( n));
    }
}

  1. 動態規劃

遞迴法求解過程中,可知存在重複求解相同的函式值的情況,導致效率低下。 故利用一個數組儲存函式值,利用空間換取時間

public class Fibonacci1 {
    public static  int getFib(int n ){
        int len=n+1;
        int f[]=new int[len];

        f[0] = 0;
        f[1] = 1;

        for (int i = 2; i <= n; i++) {
            f[i] = f[i - 1] + f[i - 2];
        }
         return f[n];
    }

    public static  void  main(String[]agrs){
        int n=10;
        System.out.println(getFib( n));
    }
}

又由於只是需要獲取第n個斐波那契數,而計算F(n)只需要F(n-1)和F(n-2)的值,可利用last以及nextToLast來儲存F(n-1)和F(n-2)的值,並不需要整個陣列來儲存所有的斐波那契數 getFib(int n )程式碼可更改為:

public static int getFib(int n){
    if(n<=1){
        return  1;
    }

    int last=1;
    int nextToLast=1;
    int answer=1;

    for(int i=2;i<=n;i++){
        answer=last+nextToLast;
        nextToLast=last;
        last=answer;
    }
    return answer;
}
  1. 矩陣