Fibonacci

73 阅读1分钟
const fibo1 = (n) => {
    let a = 1;
    let b = 1;
    let c = 0;
    for (let i = 2; i < n; i += 1) {
        c = a + b;
        a = b;
        b = c;
    }
    return c || a;
}
const fibo2 = (n) => {
    const arr = [0, 1];
    for (let i = 1; i < n; i += 1) {
        arr.push(arr[i - 1] + arr[i]);
    }
    return arr[n];
}
const fibo3 = (n = 0, n1 = 1, n2 = 1) => {
    if (n <= 0) return n2;
    return fibo3(n - 1, n2, n1 + n2);
}

通项公式

const  fibo = (n) => {
    if(n <=1 ) return n;
    return (((Math.pow((1+Math.sqrt(5))/2,n)-Math.pow((1-Math.sqrt(5))/2,n))/Math.sqrt(5))) | 0;
  }

矩阵:

    const matrixMultiply = (arr1, arr2) => {
  let result = [];
  for (let i = 0; i < arr1.length; i++) {
    let current = [];
    for (k = 0; k < arr1.length; k++) {
      // 累加
      let sum = 0;
      for (let j = 0; j < arr1[i].length; j++) {
        sum = sum + arr1[i][j] * arr2[j][k];
      }
      current.push(sum);
    }
    result.push(current);
  }
  return result;
};

const fibs = n => {
  let result = [
    [0, 1],
    [0, 0],
  ];
  const arr = [
    [0, 1],
    [1, 1],
  ];
  for (let i = 0; i < n - 1; i++) {
    result = matrixMultiply(result, arr);
  }
  return result[0][1];
};

参考文章: juejin.cn/post/692050…