js递归性能影响及解决方案

1、递归为什么耗性能:递归的执行方式是通过前一个执行程序执行完成后返回的值进行下一次执行的,所以最终结果会最后执行,可以理解为先进后出。

   举个例子:function fn(n){if(n==0){return 1} return n * fn(n-1)} 比如说现在需要执行fn(3),那么需要先得到fn(2)的结果,同理要执行fn(2)也要先得到fn(1)结果。可以看到fn被调用了三次。

  浏览器分给程序的执行内存是有限制的,当一个复杂的程序采用递归来执行时,可能会出现栈溢出错误。所以慎用。

2、可以使用迭代的方式替代递归,运行一个循环会比反复调用一个函数的开销低。

3、解决方案:建立一个缓存对象。

function memoize(fn,cache){//fn递归调用的函数,cache缓存对象的预设值
  cache = cache || {};

  var shell = function(arg){

    if(!cache.hasOwnProperty(arg)){//如果缓存数据中没有这个参数对应的值

      cache[arg] = fn(arg);//缓存递归执行结果

    }

    return cache[arg];

  }

  return shell;
}

 

转载于:https://www.cnblogs.com/muzs/p/9843405.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值