斐波那契数
斐波那契数,通常用 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;
}