2016-04-23 75 views
3

我已經閱讀了關於這個問題的十幾個變體,但這些答案並沒有導致我必須是一個明顯的錯誤。爲什麼總是返回false?爲什麼在found it之後看到called again?如果我在遞歸調用前加上return,爲什麼我看不到found it返回不退出JavaScript中的遞歸函數

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) 
} 

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

即當發現你完成了。如果沒有繼續下去。

+0

哇,就是這樣。非常感謝。所以我說的是「如果遞歸調用返回true,返回true」?我真的認爲完成第一個「返回true」然後返回遞歸調用就足夠了(如在Abu Hanifa的答案中),但這隻會導致「false」總是返回。 – rswerve