当一些计算结果可以保留下来为以后的运算提供方便的时候, 就可以用到记忆话函数
记忆化函数将计算结果存储起来,如果之后碰到相同的参数,就直接放回已经计算过的参数
使用限制: 纯函数
算法思想:空间换时间
/**
* 记忆化函数
*/
function memorize(func) {
var cache = {};
return function() {
//让参数长度与参数拼接成字符串,例如1,2 -> 212,形成唯一的key值
var key = arguments.length + Array.prototype.join.call(arguments);
if(cache[key]) {
return cache[key];
} else {
cache[key] = func.apply(this, arguments);
return cache[key];
}
}
}
/**
* 求阶乘
*/
function factorial(num){
if(num == 1 || num == 0){
return 1;
}else {
return num * factorial(--num);
}
}
var memorizeFunc = memorize(factorial);
console.time('pre')
console.log(factorial(5));
console.timeEnd('pre'); // 0.18994140625ms
console.time('mem');
console.log(memorizeFunc(5))
console.timeEnd('mem'); // 0.10009765625ms
console.time('pre')
console.log(factorial(50));
console.timeEnd('pre'); // 0.274169921875ms
console.time('mem');
console.log(memorizeFunc(50))
console.timeEnd('mem'); // 0.200927734375ms
本文介绍了一种通过存储计算结果来避免重复计算的技术——记忆化函数。该方法利用空间换取时间,特别适用于纯函数的场景。文章通过求阶乘的例子展示了记忆化函数如何显著提升计算效率。

1138

被折叠的 条评论
为什么被折叠?



