Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/386.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/33.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 Nodejs递归调用堆栈错误,但代码应该很好_Javascript_Node.js - Fatal编程技术网

Javascript Nodejs递归调用堆栈错误,但代码应该很好

Javascript Nodejs递归调用堆栈错误,但代码应该很好,javascript,node.js,Javascript,Node.js,这段代码在节点12出现错误,我想知道为什么 函数nloop(i,func){ 函数递归(obj,i,count){ obj[count+=1]=函数调用(null,count); if(count==i)返回obj; 返回递归(obj,i,count); }; 返回递归([],i-1,-1); }; var data=nloop(1000000,i=>Math.round(Math.random()*1000000)) 这段代码在节点12出现错误,我想知道为什么 节点12中的最大调用堆栈大小小

这段代码在节点12出现错误,我想知道为什么

函数nloop(i,func){
函数递归(obj,i,count){
obj[count+=1]=函数调用(null,count);
if(count==i)返回obj;
返回递归(obj,i,count);
};
返回递归([],i-1,-1);
};
var data=nloop(1000000,i=>Math.round(Math.random()*1000000))
这段代码在节点12出现错误,我想知道为什么

节点12中的最大调用堆栈大小小于1000000,这是代码完成所需的大小。我使用12.7.0进行了测试,发现最大堆栈大小为12461


原则上,尾部调用优化应该能够使此代码正常工作,但node不实现尾部调用优化(源代码:)

您可以使用动态编程来防止此错误。使用循环并将每个结果存储在数组中,而不是使用递归函数。请查看此代码:

const i=()=>Math.round(Math.random()*1000000);
常量数据=(新数组(1000000)).fill(0).map(i);

控制台日志(数据)我正在为性能使用递归。@IAMDEVONBUTTER使用递归并不总是会产生性能。@NicholasTower是的,我没有注意到
=
符号!我认为这只是
count+1
。谢谢,谢谢!有没有办法在大数据上增加和/或运行递归?如果没有尾部调用优化,就不可能了。但是你可以看看蹦床(例如,)。您提到您这样做是出于性能原因;我怀疑,如果使用循环,性能会比使用递归+蹦床更好。