节点javascript递归内存不足

时间:2016-01-29 08:55:19

标签: javascript node.js recursion

我正在用节点做一个简单的递归来生成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);

3 个答案:

答案 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功率)。