1.递归实现
function folino(n){
if (n<2) {
return 1;
}else{
return folino(n-2) + folino(n-1) ;
}
}
缺点:重复计算。
var another=folino;
folino=null;
another(5) //会出错,因为another 函数中依然存在folino,而此时folino为空
2.递归实现(使用函数表达式)
var fiboanacci=function f(num){
if(num===0||num===1){
return 1;
}
else{
return f(num-1)+f(num-2)
}
}
缺点:重复计算,但是像1那样调用时不会出错。3.递归实现(带有记忆功能)
var fiboanacci=(function(){
var memo={};
function f(n){
var value;
if (n in memo) {
value=memo[n];
}else{
if (n===0 ||n===1) {
value=n;
}else{
value=f(n-1)+f(n-2);
}
memo[n]=value;
}
return value;
}
return f;
})();
优点:使用闭包实现记忆功能,避免了重复计算,提高性能。
4.思考:如下实现与3的实现有什么不同?为什么不能实现预期的效果?
var fiboanacci=function f(num){
var memo={};var value;
if (memo[num]) {
console.log("exist");
return memo[num];
}
if (num<=1) {
value=1;
}else{
value=f(num-1)+f(num-2);
}
memo[num]=value;
console.log(memo[num]);
return value;
};
欢迎讨论、指正!