我正在用节点做一个简单的递归来生成10个字符的所有字符串。 我在执行期间发生了内存泄漏。 代码如下。 有什么想法吗?
我认为它可能与console.log(word)行相关联。 没有这一行,代码似乎工作。 但是,如果将结果打印到屏幕上,我的最终目标是使用生成的单词实现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);
答案 0 :(得分:1)
首先,您需要将递归调用移出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 ;
}
答案 1 :(得分:0)
至于为什么你的内存耗尽,我不能完全说出来,但你可以试试这个。作为一个注释,我运行时没有内存耗尽(运行几分钟)。
注意:这将锁定您的计算机(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);
答案 2 :(得分:0)
Jeannot,你必须足够有趣,你不能那样生成它们。
对于10 = 141&#39; 167&#39; 653&#39; 653&#39; 376次操作(即约5亿次操作),26的权力。
你必须测量它,即使使用C / C ++(相当低且接近cpu级别),你应该只运行低于10亿次操作(按当前2016年的CPU功率)。