节点javascriptrecursion内存不足

我正在做一个简单的recursion节点来生成所有的10个字符的string。 执行期间我有内存泄漏。 代码如下。 有任何想法吗 ?

我认为它可能会链接到console.log(单词)行。 没有这条线,代码似乎工作。 但是,如果将结果打印到屏幕上,我的最终目标是使用生成的单词实现http请求。 我已经尝试过,没有丝网印刷,它也产生了内存不足。

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); 

首先,您需要将recursion调用移出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 ; } 

至于你为什么内存不足,我不能说完全,但你可以试试这个。 作为一个说明,我没有用尽内存(运行几分钟)。

注意:这将locking您的机器(400多万亿次操作)

 var inputArr = "abcdefghijklmnopqrstuvwxyz ".split("").concat("\'"); function run(str) { console.log(str); } function recurse(index, recursed) { if (recursed === undefined) recursed = ""; if (recursed.length >= 10) return; for (var i = 0; i < index.length; i++) { run(recursed + index[i]); recurse(index, recursed + index[i]); } } recurse(inputArr); 

让诺特,你一定很有趣,你不能这样生成它们。

这就是26的10次= 141'167'095'653'376的操作(即〜五十亿次操作)。

即使使用C / C ++(相当低和接近cpu级别),您也必须进行测量,您应该只运行10亿次以下的操作(按2016年的CPU功耗)。