我有一个 memoized 递归算法f(n)
当我运行f(1000)
时,一切正常,运行时间不到一分钟。
当我运行f(10000)
时,我得到一个范围错误/超出最大调用堆栈大小。
我不相信这个错误与我的算法的效率有关(由于记忆而是多项式),而且似乎更像是配置事物。
我尝试了node app.js --stack-size=32000
并且没有让错误消失。我认为当前的堆栈大小足以满足10倍。该堆栈大小是否可能太小,或者是否有办法在节点中强制/设置配置来处理n = 10000
情况?
同样,--stack-size选项似乎没有做任何事情......我把它减少到“1”并且我的程序运行速度一样快。
答案 0 :(得分:2)
看起来Node需要将其启动标志放在正在执行的文件名之前。
node --stack-size=32000 app.js
答案 1 :(得分:0)
这里只有2便士提示:
如果你的应用程序抛出堆栈溢出错误,意味着你要一次性做太大的事情,继承太多的范围。
考虑将登录分成异步函数,这样它就可以在单独的上下文中执行调用,并且可以防止堆栈溢出异常问题,并且允许应用程序在整个逻辑中共享计算资源,而不是自私地使用它一个实际上是瓶颈的功能。