我目前正在处理 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/