1、记忆优化:函数可以通过对象obj去记录之前操作的结果,从而避免无谓的运算
/*优化前*/
var count = 0;
function fibonacci(n){
count++; //统计函数调用的次数
return n<2 ? n: fibonacci(n-1)+fibonacci(n-2);
}
console.log(fibonacci(4)); //3
console.log(count); //9
/*优化后*/
var count = 0;
var fibonacci2 = function(){ //立即调用
var memo = [0,1]; //存储之前操作的结果
var fib = function(n){
var result = memo[n];
count++;
if(typeof result!="number"){
result = fib(n-1) + fib(n-2);
memo[n] = result;
}
return result;
}
return fib;
}();
console.log(fibonacci2(4)); //3
console.log(count); //7
2、尾调用就是指函数作为另一个函数的最后一条语句被调用