// 斐波那契数列 1 1 2 3 5 8 13 21 34 55 ...
// 规律:从第三个数开始,后一个数等于前两个数的和
// getFib(n) = getFib(n-1) + getFib(n-2)
// 需求:求第100个斐波那契数
// 方法一
var arr = []
function getFib(n) {
if (n === 1 || n === 2) {
return 1
}
if (arr[n]) {
return arr[n]
} else {
arr[n] = getFib(n - 1) + getFib(n - 2);
return arr[n]
}
}
console.log(getFib(100));
// 方法二:利用递归
function outer(){
var arr = []
function getFib(n) {
if (n === 1 || n === 2) {
return 1
}
if (arr[n]) {
return arr[n]
} else {
arr[n] = getFib(n - 1) + getFib(n - 2);
return arr[n]
}
}
return getFib;
}
var result = outer();
console.log(result(100));
// 方法三:利用匿名函数自调用优化,减少使用全局变量===结合闭包进行性能优化(保护变量)
var result = (function(){
var arr = []
function getFib(n) {
if (n === 1 || n === 2) {
return 1
}
if (arr[n]) {
return arr[n]
} else {
arr[n] = getFib(n - 1) + getFib(n - 2);
return arr[n]
}
}
return getFib;
})();
console.log(result(100));