函数记忆 - 函数角度性能优化

当一些计算结果可以保留下来为以后的运算提供方便的时候, 就可以用到记忆话函数

记忆化函数将计算结果存储起来,如果之后碰到相同的参数,就直接放回已经计算过的参数

使用限制: 纯函数

算法思想:空间换时间

/**
 * 记忆化函数
 */
function memorize(func) {
	var cache = {};
	return function() {
		var key = arguments.length + Array.prototype.join.call(arguments);	//让参数长度与参数拼接成字符串,例如1,2 -> 212,形成唯一的key值
		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');		// 3.162841796875ms
console.time('mem');
console.log(memorizeFunc(5))
console.timeEnd('mem');		// 0.38720703125ms

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值