斐波那契數
斐波那契數,通常用 F(n) 表示,形成的序列稱爲斐波那契數列。該數列由 0 和 1 開始,後面的每一項數字都是前面兩項數字的和。也就是:
F(0) = 0, F(1) = 1
F(N) = F(N - 1) + F(N - 2), 其中 N > 1.
給定 N,計算 F(N)。
輸入 | 輸出 | 解釋 |
---|---|---|
2 | 1 | F(2) = F(1) + F(0) = 1 + 0 = 1. |
3 | 2 | F(3) = F(2) + F(1) = 1 + 1 = 2. |
4 | 3 | F(4) = F(3) + F(2) = 2 + 1 = 3. |
解法一(遞歸)
- 簡介的代碼
- 對計算機不否友好
var fib = function(N) {
if(N == 0) return 0
else if(N == 1) return 1
else return fib(N-1) + fib(N-2)
};
解法二(動態規劃)
- 所有可以遞歸的方式都可以考慮一下動態規劃~
var fib = function(N) {
if(N === 0) return 0
var val = [];
for (var i = 0; i <= N; ++i) {
val[i] = 0;
} //長度 = 斐波那契數列要算的值
if (N == 1 || N == 2) {
return 1; //邊界值
} else {
val[1] = 1;
val[2] = 2;
for (var i = 3; i <= N; ++i) {
val[i] = val[i - 1] + val[i - 2];
} // 將每一個數字都算出來,最後即可解決,不用每一個數都想下遞歸計算
return val[N - 1];
}
};
解法三(遞歸變式)
function iterFib(n) {
var last = 1;
var nextLast = 1;
var result = 1;
for (var i = 2; i < n; ++i) {
result = last + nextLast;
nextLast = last;
last = result;
}
return result;
}