节点javascript递归内存不足
我正在使用节点执行一个简单的递归,以生成所有10个字符的字符串。 我在执行过程中内存泄漏。 代码如下。 有什么想法吗 我想它可能链接到console.log(word)行。 如果没有这一行,代码似乎可以工作。 但是,如果将结果打印到屏幕上,我的最终目标是使用生成的单词实现http请求。我试过不用丝网印刷,也会产生内存不足的问题节点javascript递归内存不足,javascript,node.js,recursion,Javascript,Node.js,Recursion,我正在使用节点执行一个简单的递归,以生成所有10个字符的字符串。 我在执行过程中内存泄漏。 代码如下。 有什么想法吗 我想它可能链接到console.log(word)行。 如果没有这一行,代码似乎可以工作。 但是,如果将结果打印到屏幕上,我的最终目标是使用生成的单词实现http请求。我试过不用丝网印刷,也会产生内存不足的问题 var char = [ 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h',
var char = [
'a',
'b',
'c',
'd',
'e',
'f',
'g',
'h',
'i',
'j',
'k',
'l',
'm',
'n',
'o',
'p',
'q',
'r',
's',
't',
'u',
'v',
'w',
'x',
'y',
'z',
' ',
'\''
];
function recurseWord( keyword ){
if ( keyword.length >= 10 ){
return null ;
}
else{
for ( var index = 0 ; index < char.length ; ++index){
keyword = keyword + char [index];
console.log (keyword);
recurseWord (keyword) ;
keyword = keyword.substring(0, keyword.length-1);
}
}
return null ;
}
var keyword = "";
recurseWord(keyword);
var char=[
“a”,
“b”,
"c",,
“d”,
"e",,
"f",,
"g",,
"h",,
“我”,
"j",,
"k",,
“l”,
“m”,
"n",,
"o",,
"p",,
"q",,
“r”,
“s”,
"t",,
"u",,
"v",,
“w”,
“x”,
“y”,
"z",,
' ',
'\''
];
函数recurseWord(关键字){
如果(关键字长度>=10){
返回null;
}
否则{
对于(变量索引=0;索引
首先,需要将递归调用移出for循环。否则循环将永远不会退出,因为index
将保持在0
function recurseWord( keyword ){
console.log (keyword);
if ( keyword.length >= 10 ){
return null ;
}
else{
for ( var index = 0 ; index < char.length ; index++){
keyword = keyword + char [index];
console.log ("index "+index);
}
keyword += recurseWord(keyword.substring(0, keyword.length-1));
}
return null ;
}
函数recurseWord(关键字){
console.log(关键字);
如果(关键字长度>=10){
返回null;
}
否则{
对于(变量索引=0;索引
至于内存不足的原因,我不能确切地说,但您可以试试这个。值得注意的是,我并没有因为运行这个而耗尽内存(已经运行了几分钟)
注意:这将锁定您的机器(400多万亿次操作)
var inputArr=“abcdefghijklmnopqrstuvxyz”.split(“”)concat(“”);
函数运行(str){
console.log(str);
}
函数递归(索引,递归){
如果(递归===未定义)
递归=”;
如果(递归长度>=10)
返回;
对于(变量i=0;i 递归(inputArr)代码>Jeannot,你必须足够有趣,你不能那样生成它们
这是10的26次方=141'167'095'653'376次操作(即约50亿次操作)
你必须测量它,即使使用C/C++(相当低,接近cpu水平),你也应该只运行10亿次以下的操作(以2016年的cpu功率计算)。我的快速数学告诉我有296万亿次组合。您确定要为每个应用程序执行web请求吗?嗯,这相当多;-)。我可能会限制为几个字符。另外,我想我会更新代码,在请求结果为负时停止递归。据我所知,我的问题是一般性的;-)事实上,内存用完花了多长时间?我运行了你的代码,到目前为止它似乎还在运行(使用console.log)。而且,从理论上讲,它应该运行良好。您最多只有10个作用域。node的哪个版本/操作系统?node版本5.2.0。它在10秒后崩溃。它一直持续到aaaaaakjl或多或少…不幸的是你错了。我想生成10个字符的所有组合。您的算法只生成一个26个字符的字符串。此外,您的算法没有正确使用递归。事实上,您只需要执行一个直接满足停止条件的递归调用。您期望的结果是什么?['abcdefghij'、'bcdefghijk'、'cdefghijkl',…]我不明白为什么需要递归。你希望得到28^10的结果吗?好吧,我想我的代码没有错,因为我的代码也有同样的错误。当我到达字符串“aaaaaarfs”时,它会很快崩溃(这取决于执行情况:有时崩溃得更快,有时更慢)。目前,我运行的是v5.5.0 Windows x64版本。我让它运行到AAAAAAAA+,没有任何问题。