2016-04-23 107 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