传统方法(耗时长):
const fibonacci = (n) => {
let arr = [0,1];
for(let i=2;i<=n;i++){
arr[i] = arr[i - 1] + arr[i - 2]
}
return arr[n]
}
优化方法一(利用递归):
const fibonacci = (n) => {
if(!(n in fibonacci))fibonacci[n]=fibonacci(n-1)+fibonacci(n-2);
return fibonacci[n];
}
fibonacci[1]=1;
fibonacci[2]=1;
优化方法二(利用实现了记忆功能的递归):
const memorize=(f)=>{
let cache={};
return function(){
let key =arguments.length+Array.prototype.join.call(arguments,',');
if(key in cache)return cache[key];
else return cache[key]=f.apply(this,arguments);
}
}
const fibonacci =memorize(
(n)=>{
if(!(n in fibonacci))fibonacci[n]=fibonacci(n-1)+fibonacci(n-2);
return fibonacci[n];
}
)
fibonacci[1]=1;
fibonacci[2]=1;
优化方法三(利用闭包与递归):
const fibonacci=((s)=>(f=(i)=>s[i]||(s[i]=f(i-1)+f(i-2))))([0,1,1]);