一、什么是斐波那契数列
1、1、2、3、5、8、13、21、34......
F(1)=1,F(2)=1, F(n)=F(n-1)+F(n-2)(n>=2,n∈N*)
特点:每一项的值都是前两项相加得到的
二、递归法
function fn(n) {
if (n <= 2) {
return 1
};
return fn(n - 1) + fn(n - 2);
}
console.log(fn(3))
三、尾调用优化(递归方法基础上进行尾调用优化)
function fn(n, current = 0, next = 1) {
if (n == 0) return 0;
if (n == 1) return next;
return fn(n - 1, next, current + next);
}
console.log(fn(3))
四、闭包法(利用闭包特性把运算结果存储在数组里)
var fn = function () {
let memo = [0, 1];
let fib = function (n) {
if (memo[n] == undefined) {
memo[n] = fib(n - 2) + fib(n - 1)
}
return memo[n]
}
return fib;
}()
console.log(fn(3))
五、循环法
function fn(n) {
var res1 = 1;
var res2 = 1;
var sum = res2;
for (var i = 1; i < n - 1; i++) {
sum = res1 + res2;
res1 = res2;
res2 = sum;
}
return sum;
}
console.log(fn(3))