实例一:
function func(n){
if(n==0 || n==1){
return 1;
}
return n*func(n-1);
}
var arr=[1,1];
function funcGj(n){
if(arr[n]){
return arr[n];
}else{
if(n==0 || n==1){
return arr[n];
}
arr[n]=n*funcGj(n-1);
return arr[n];
}
}
console.time("go");
for(var i=0;i<5;i++){
func(i);
}
console.timeEnd("go");
console.time("go");
for(var i=0;i<5;i++){
funcGj(i);
}
console.timeEnd("go");
console.time("go");
for(var i=0;i<5;i++){
funcGj(i);
}
console.timeEnd("go");
// 高级 继续升级
function funcGj2(n){
if(n==0 || n==1){
return 1;
}
return n*funcGj2(n-1);
}
function memorize(target){
var cache={};
return function() {
var key=Array.prototype.join.call(arguments);
if(cache[key]){
return cache[key];
}else{
cache[key]=target.apply(this,[].slice.call(arguments));
return cache;
}
}
}
var newFunc=memorize(funcGj2);
console.time("go");
for(var i=0;i<100;i++){
newFunc(i);
}
console.timeEnd("go");
console.time("go");
for(var i=0;i<100;i++){
newFunc(i);
}
console.timeEnd("go");