#js
代码如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<script type="text/javascript">
//"use strict"
/*生成带记忆功能的函数*/
function memorize(f){
var cache={};
return function(){
var key=arguments.length+Array.prototype.join.call(arguments,",");
if(key in cache){
return cache[key];
}else{
return cache[key]=f.apply(this,arguments);
}
}
}
/*递归计算n的阶乘*/
function nj(n){
if(isFinite(n)&&n>0&&n==Math.round(n)){
if(!(n in nj))
nj[n]=n*nj(n-1);
return nj[n];
}
else return NaN;
}
nj[1]=1;
var menj=memorize(nj);
menj[1]=1;
menj(80);//记录结果
var ms=(new Date).getTime();
console.log(ms);
console.log(menj(80));
console.log((new Date).getTime()-ms);
console.log("-----------------------------------------")
var s=(new Date).getTime();
console.log(s);
console.log(nj(80));
console.log((new Date).getTime()-s);
</script>
</head>
<body>
</body>
</html>
为什么不带记忆功能的递归函数的执行时间比带记忆功能的递归函数的执行时间短?