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…