0

私はこのウェブサイトに不慣れで、私が理解できないことで私を助けることができると思いました.

for ループを再帰的にネストし、for ループの中心にあるすべての単一リーフの完全なパスを個々の配列にプッシュする方法を見つける必要があります。

言い換えれば、私は次のようなことをする必要があります

var link2 = function(node,nb){
var array =[];
//getAnwers returns an array containing the leaves of the node.
var array1 = getAnswers(node);  
        for(var j =0;j<getAnswers(node).length;j+=2){     
            var array2 = getAnswers(array1[j]);
            for(var k = 0;k<array2.length;k+=2){
                var array3 = getAnswers(array2[k]);
                for(var l=0;l<array3.length;l+=2){
                    var arraytemp = [];
                    arraytemp.push(mot);
                    arraytemp.push(array1[j]);
                    arraytemp.push(array2[k]);
                    arraytemp.push(array3[l]);
                    array.push(arraytemp);
                    print(arraytemp);
                }
            }
        } return array;   
    }
}}

しかし、再帰的な方法で!nb は再帰の回数です。

var link6 = function(node,nb){
var array = [];
var arraySave = [];

var helper = function(node2,nb,arrayTemp){//pause();
    if(nb<=0){

        for(var k=0;k<arrayTemp.length;k+=2){
            var arrayChain = [];
            for(var j=0;j<arraySave.length-1;j++){
                arrayChain.push(arraySave[j]);
            }
            arrayChain.push(arrayTemp[k]);
            if(k===arrayTemp.length-2){
                arraySave.pop();
                arraySave.pop();
            }
            array.push(arrayChaine);
        }
    }

    else{
        var array1 = getAnswers(node2);
        for(var i =0;i<array1.length;i+=2){
                arraySave.push(array1[i]);
                helper(array1[i],nb-1,array1);
                return array;
            }   

    }
}
helper(node,nb,null);
return array;

}

問題は、最初のコードで行ったのとまったく同じことをどのように行うことができるかということですが、再帰的な方法で、ツリーのレベル数を選択できます! 関数link6でご覧のとおり試してみましたが、良い結果が得られませんでした....私はかなりの初心者です..

どうもありがとうございました!

4

1 に答える 1

1

最初のヒント: を使用しforEachます。

var array = [];
getAnswers(mot, seuil).forEach(function(jarr) {
  return getAnswers(jarr).forEach(function(karr) {
    return getAnswers(karr).forEach(function(larr) {
        var arraytemp = [mot, jarr, karr, larr];

        print(arraytemp);
        array.push(arraytemp);
    });
  });
});

そして、Paul S.が彼のコメントで指摘したように、おそらくcontinue他のすべてのブランチで使用するつもりはありません。

元の質問に答えるために、次のようなものを探していると思います:

/* Assumes that n >= 1 and depth(arr) > n */
function ndeep(arr, n, fn) {
  function helper(acc, n) {
    arr.forEach(function(narr) {
      var nacc = acc.slice();
      nacc.push(narr);

      if (n == 1) {
        return fn(nacc); 
      } else {
        return helper(nacc, n - 1);
      }
    });
  }

  return helper([], n);
}

var array = [];
ndeep(getAnswers(mot, seuil), depth, function(acc) {
    array.push([mot].conat(acc));
});

...depth希望の深さはどこですか。

于 2012-12-30T04:38:48.317 に答える