1. 程式人生 > >遞迴一:斐波那契數列

遞迴一:斐波那契數列

/**
 * 題目:斐波那契數列   
 * 描述:大家都知道斐波那契數列,現在要求輸入一個整數n,請你輸出斐波那契數列的第n項。n<=39
 * 解決方案:方法一:遞迴
 *        方法二:動態規劃,如果需要快取所有的結果,用額外的陣列空間進行儲存。只要結果的話,就只需要中間的一個變數
 *
 * 裴波那契背景:又稱黃金分割數列或者兔子數列,從第三項開始,每一項都等於前兩項之和
 *  主要是遞迴和非遞迴,
 * */

public class One {
    //遞迴
    public static int One(int n) {
        if(n ==0 ) {
            return 0;
        }
        if(n == 1  ) {
            return 1;
        }
        return One(n-1)+One(n-2);
    }
    //對結果要求快取
    public static int Two(int n) {
        if(n<=2) return n;
        int
arr[] = new int[n+1]; arr[0] =0; arr[1] =1; for(int i=2;i<=n;i++) { arr[i] = arr[i-1] +arr[i-2]; } return arr[n]; } //最優解: public static int Three(int n) { if(n<2) return n; int one = 0; int two = 0; int
result =0; for(int i = 2; i<=n;i++) { result = one + two; one = two; two = result; } return result; } }