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)
谢谢你的帮助。
最大递归级别是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)。