/*
斐波那契数:
斐波那契数列指的是这样一个数列1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89...每一项都等于前两项之和
*/
// 迭代写法
function fibonacci1(n) {
var res1 = 1;
var res2 = 1;
var sum = res2;
for (var i = 2; i < n; i++) {
sum = res1 + res2;
res1 = res2;
res2 = sum;
}
return sum;
}
// 递归写法,参数n变大时,会出现浏览器假死现象
function fibonacci2(n) {
if (n <= 2) {
return 1;
} else {
return fibonacci2(n - 1) + fibonacci2(n - 2);
}
}
// 尾调用优化
function fibonacci3(n, res1 = 1, res2 = 1) {
if (n <= 2) {
return res2;
} else {
return fibonacci3(n - 1, res2, res1 + res2);
}
}
// 闭包写法,实现记忆功能,避免了重复计算,提高性能
const fibonacci4 = function() {
var mem = [0, 1];
var f = function (n) {
var res = mem[n];
if (typeof res !== 'number') {
mem[n] = f(n - 1) + f(n - 2);
res = mem[n];
}
return res;
}
return f;
}();
// 更多资料
// https://blog.csdn.net/qq_39300332/article/details/80000837
// https://www.cnblogs.com/iriszhang/p/6093175.html
// https://segmentfault.com/a/1190000018473729