2016-04-23 36 views
3

この質問ではダースのバリエーションを読んだことがありますが、これらの回答では明白な間違いではありません。なぜこれはいつもfalseを返しますか? found itの後にもcalled againが表示されるのはなぜですか?また、再帰呼び出しの前にreturnを置くと、なぜfound itが表示されませんか?javascriptで戻り値が再帰関数を終了しない

for (var i = 0; i < object[start].edges.length; i++){ 
    if (subResult(object, object[start].edges[i], target)) { 
     return true; 
    } 
} 

すなわちへ

function subResult (object, start, target){ 
    console.log('called again') 
    if (start === target){ 
     console.log('found it') 
     return true 
    } else { 
     for (var i = 0; i < object[start].edges.length; i++){ 
     subResult(object, object[start].edges[i], target) 
     } 
    } 
    return false 
} 

答えて

4

変更

for (var i = 0; i < object[start].edges.length; i++){ 
    subResult(object, object[start].edges[i], target) 
} 

あなたの完了を見つけたとき。続かない場合。

+0

うわー、それでした。本当にありがとう。だから私は "再帰呼び出しが真を返す場合、真を返す"のような何かを言っている?私は本当に最初の 'return true'を行い、再帰呼び出しを返すだけで十分だと思っていましたが(Abu Hanifaの答えのように)、' false'が常に返されました。 – rswerve

関連する問題