# 斐波那契数列中的问题

# 递归计算

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
最后更新: 4/9/2020, 10:43:01 AM