Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何强制node.js执行更深层次的递归?_Javascript_Algorithm_Node.js_Recursion - Fatal编程技术网

Javascript 如何强制node.js执行更深层次的递归?

Javascript 如何强制node.js执行更深层次的递归?,javascript,algorithm,node.js,recursion,Javascript,Algorithm,Node.js,Recursion,我有一个记忆的递归算法f(n) 当我运行f(1000)时,一切正常,运行不到一分钟 当我运行f(10000)时,我得到一个范围错误/超过了最大调用堆栈大小 我不相信这个错误与我的算法的效率有任何关系(这是由于记忆而产生的多项式),而且更像是一个配置问题 我试着做了node app.js--stack size=32000,但这并没有使错误消失。我原以为当前堆栈大小的10倍就足够了。堆栈大小是否可能太小,或者是否有办法强制/设置节点中的配置来处理n=10000情况 而且--stack size选项

我有一个记忆的递归算法
f(n)

当我运行
f(1000)
时,一切正常,运行不到一分钟

当我运行
f(10000)
时,我得到一个范围错误/超过了最大调用堆栈大小

我不相信这个错误与我的算法的效率有任何关系(这是由于记忆而产生的多项式),而且更像是一个配置问题

我试着做了
node app.js--stack size=32000
,但这并没有使错误消失。我原以为当前堆栈大小的10倍就足够了。堆栈大小是否可能太小,或者是否有办法强制/设置节点中的配置来处理
n=10000
情况


而且--stack size选项似乎没有任何作用……我将其减少为“1”,我的程序运行速度也一样快。

这里只需一个2便士的提示:

如果您的应用程序抛出堆栈溢出错误,则意味着您一次就做了太大的事情,继承了太多的作用域


考虑将登录分为异步函数,这样它就可以在不同的上下文中执行调用,防止出现堆栈溢出异常问题,并允许应用程序在整个逻辑中共享计算资源,不要自私地在一个实际上是瓶颈的函数中使用它。

似乎节点要求在执行文件名之前放置其启动标志

node --stack-size=32000 app.js

要么不使用递归,将其分解为更小的异步批(如果可能),要么尝试y-combinator……此外,我相信ES6将允许正确的尾部调用,这意味着您不应该有调用堆栈问题(假设您立即返回)@cookiemonster谢谢:)尝试将
堆栈大小
放在文件名之前。只是做了一点测试,这似乎起了作用
node--stack size=32000 app.js
@cookie monster请添加您的注释作为答案…当我增加堆栈大小时,它不会出错…是的,因为之后的参数被认为是应用程序的参数,而不是节点引擎的参数。@Joe:这很有意义。