可以在SpiderMonkey中增加递归限制吗?

Dar*_*ton 3 javascript recursion spidermonkey

我目前正在使用JavaScript处理Euler项目中的问题。在大多数情况下,我一直在使用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);
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助。

pib*_*pib 5

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

如果您获得了源代码(如此处所述:https : //developer.mozilla.org/En/SpiderMonkey/Build_Documentation),则可以对其进行更改并以更高的值编译新的解释器。

打开js / src / jsinterp.c并找到包含以下内容的行

#define MAX_INLINE_CALL_COUNT 3000
Run Code Online (Sandbox Code Playgroud)

并将最后的值更改为所需的任何值。请注意您的内存使用情况,因为太高的值可能会杀死您的计算机(或至少会使它变得迟钝)。

另外,您可能希望编译优化版本(如上页所述),因为在调试版本中释放内存时,它会用一个设置值覆盖所有内存,从而使调试更加容易,但会极大降低您的调试速度。程序(请参阅http://groups.google.com/group/mozilla.dev.tech.js-engine/msg/57934d626c75f7d3)。