【问题标题】:Why is recursion faster when using a global variable rather than a local one for memoization?为什么使用全局变量而不是局部变量进行记忆时递归更快?
【发布时间】:2013-04-04 19:07:57
【问题描述】:

在尝试加速递归函数时,我注意到了一些特殊情况。当我将用于记忆的对象作为参数而不是全局变量传递给函数时,代码执行变得相当慢。

所以不要这样:

var memoizationObj = {};
function factorial(n) {
  // factorial code
};

var a = factorial(10);

我把代码改成这样:

function factorial(n, memoizationObj) {
  // factorial code
};
var b = factorial(10, {});

代码执行速度变慢了 > 50 倍。

为什么会这样?这里是jsperf 的完整代码。

【问题讨论】:

标签: javascript performance recursion memoization


【解决方案1】:

原因是 setUp 在所有试验中只调用一次,因此在全球版本的第一次试验之后的每个试验中,您都是从完整的备忘录开始的。基本上,您只计算一次该值,所有后续运行都只返回一个缓存结果。

查看此版本以获得更好的比较,它会在每次运行全局测试时重置全局备忘录。

http://jsperf.com/recursion-with-global-obj-vs-arg/2

【讨论】:

    猜你喜欢
    • 2021-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-30
    • 1970-01-01
    • 1970-01-01
    • 2019-08-16
    相关资源
    最近更新 更多