# 斐波那契数列中的问题
# 递归计算
function fb(n){
if (n == 1 || n==2) {
return 1
}
return fb(n-1)+fb(n-2)
}
console.log(fb(4))
求值一大,就会计算困难,系统可能卡顿崩溃
# 数组法
const fibonacci = (n) => {
if (typeof n !== 'number' || n <= 0) {
throw new Error(`${n} must be a number greater than 0`);
}
if (n < 3) {
return 1;
} else if (n > 1476) { // 最大值在 n 等于 1476 时,超过 1476 计算出来的值就已经超出 js 可表示的数值大小了,全部只能得到 Infinity
return Infinity;
}
const resArr = new Array(n).fill(1); // 省去初始化第一项和第二项了
for (let i = 2; i < n; i++) {
resArr[i] = resArr[i - 1] + resArr[i - 2];
}
return resArr[n - 1];
}
console.log(fibonacci(1476)); // 1.3069892237633987e+308
console.log(fibonacci(1477)); // Infinity