グラフを横断しようとしています。すべての頂点が接続されていないためです。私はすべてのノードからのトラバーサルを開始する必要があります。ノードは2次元配列にあります。私は大きなテキストファイルからの入力を取得し、ここで私はそれを行う方法です午前:ネストされたループで再帰関数が呼び出されない
lr.on('end', function(){
//Callback called when file reading is complete
initialize(); //initialize stuff
startTraversal();
});
としてstartTraversal()
メソッドが定義されています
function startTraversal(){
for(i=0;i<x;i++){
for(j=0;j<y;j++){
console.log(i+', '+j);
traverse(i,j); //Call Traverse i,j every time once
}
}
}
traverse(i,j)
は再帰関数です。だから私はノードi,j
から可能なすべてのパスを見て、traverse
を開始します。 traverse()
方法の広範な構造は以下である:
startTraversal()
関数呼び出しのすぐ
function traverse(i,j){
var possible = getAdjacent(i,j); //getPossible Routes
if(possible.length == 0){
//do stuff
return; //Tried adding return statement here
}
else{
for(x=0;x<possible.length;x++){
if(!data[a][b].visited) //if node is not visited
traverse(a,b);
//Do further stuff when this^call returns, finding max etc
...
} //End of for
}
}
、内側ループのみ私はconsole.log
から確認i
の最初の値に対して実行されます。私はなぜループがさらに実行されないのか理解できません。
PS:ネストされたループをコールバックの外に手動で配置すると、ループとトラバーサルが期待通りに行われます。しかし、ファイルが完全に読み込まれた場合にのみstartTraversal()
メソッドを開始する必要があります。ループが継続しないように、値が返されない関数traverse()
と何か関係があると思います。私はreturn
をtraverse
メソッドの基本ケースに追加しようとしましたが、成功しませんでした。
この問題に関する洞察は深く感謝しています。ネストされたループで再帰呼び出しを処理する方法を知りたければ、少なくともjavascriptで知りたいでしょう。
実際に関数内の変数を宣言する必要があります...現在、すべてのループは同じカウンタを共有しています。 – Teemu
getAdjacent()メソッド、コールバックを持っていますか?そして、内側ループがiの最初の値に対してのみ実行されると言ったとき、あなたは値0を意味しますか?現実には、書かなかったコードにコールバックメソッドが含まれているかどうかを知りたい場合 – Ediruth
すべてのループが同じカウンタを使用する方法はわかりません。変数 'i'と' j'をパラメタとして 'traverse'関数に渡しています。彼らは価値のあるものになるでしょう。 –