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

时间:2010-01-20 21:09:30

标签: javascript recursion spidermonkey

我目前正在使用JavaScript处理Project 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);

感谢您的帮助。

1 个答案:

答案 0 :(得分:4)

最大递归级别是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)。