我目前正在使用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);
感谢您的帮助。
答案 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)。