改進Fibonacci數列

1.遞歸

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

當n越大時,耗時越長,因爲有大量冗餘操作
舉個栗子:
n=4:

Fibonacci(4) = Fibonacci(3) + Fibonacci(2);
= Fibonacci(2) + Fibonacci(1) + Fibonacci(1) + Fibonacci(0);
= Fibonacci(1) + Fibonacci(0) + Fibonacci(1) + Fibonacci(1) + Fibonacci(0);

可以看到n=4的情況下Fibonacci(1)重複計算次數就已經高達3次

2.迭代
空間代價換取時間

public class Solution {
    public int Fibonacci(int n) {
            if(n<=1)
                return n;
        int a0=0,a1=1,a=1;
        for(int i=1;i<n;i++){
            a=a0+a1;
            a0=a1;
            a1=a;
        }
        return a;
    }
}

3.動態規劃
時間空間上性能都比較好

class Solution {
public:
    int Fibonacci(int n) {
        int f = 0, g = 1;
        while(n--) {
            g += f;
            f = g - f;
        }
        return f;
    }
};
發佈了39 篇原創文章 · 獲贊 2 · 訪問量 8918
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章