javascript - 是否可以增加 SpiderMonkey 中的递归限制?

标签 javascript recursion spidermonkey

我目前正在处理 Project Euler 中的问题使用 JavaScript。大多数情况下,我一直在使用 for 循环来遍历问题,但我想使用递归函数。然而,似乎所有的 JavaScript 引擎都对它们可以处理的递归数量有限制。

我编译/安装了SpiderMonkey尝试从 shell 运行,但仍然得到 18: InternalError: too much recursion

SpiderMonkey 是否有增加递归限制的方法,或者这只是一个坏主意

代码示例:

function cycle(x)
{
    if (check_divisble(x))
    {
        print(i + ' is divisble by 1 - 20' + '\n');
        return;
    }


    x+=20;
    cycle(x);
}

cycle(50400);

感谢您的帮助。

最佳答案

最大递归级别是 C 源代码中的硬编码值。

如果您获得源代码(如此处所述:https://developer.mozilla.org/En/SpiderMonkey/Build_Documentation),您可以更改它并编译一个具有更高值的新解释器。

打开js/src/jsinterp.c,找到包含

的行
#define MAX_INLINE_CALL_COUNT 3000

并将末尾的值更改为您想要的任何值。密切关注您的内存使用情况,因为太高的值可能会杀死您的机器(或者至少让它变得非常迟钝)。

此外,您可能想编译优化版本(如上页所述),因为在调试版本中释放内存时,它会用一个设置值覆盖所有内存以使调试更容易,但它可以极减慢你的程序(参见 http://groups.google.com/group/mozilla.dev.tech.js-engine/msg/57934d626c75f7d3 )。

关于javascript - 是否可以增加 SpiderMonkey 中的递归限制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2104989/

相关文章:

JavaScript 函数的参数在第一次使用后变得未定义

javascript - 简单 Ng-Repeat(不重复)场景指令 TemplateUrl

python - 无限递归和无限循环哪个更优化?

javascript - 带 block 的常量声明

javascript - $location 在 AngularJS 自定义指令中不起作用

javascript - 球体对象的 three.js 外发光?

java - 使用递归和通配符 (*) 在文件中搜索

c++ - 用户应用程序中的递归重试是否危险?

javascript - 在 C++ 中嵌入 Mozilla 的 JavaScript 引擎

javascript - 蜘蛛猴和垃圾收集