Java 递归查找路径

Java 递归查找路径,java,recursion,Java,Recursion,我想在地图上的两点之间找到一条路 当它从循环中断并返回权重时,它转到else语句并再次调用find。为什么代码会这样做 public int find() throws LinkException { Node currentNode = map.getNode(origin); int weight = 0; return find(currentNode, null, weight); } private int find(Node currentNode, Nod

我想在地图上的两点之间找到一条路

当它从循环中断并返回权重时,它转到else语句并再次调用find。为什么代码会这样做

public int find() throws LinkException {
    Node currentNode = map.getNode(origin);
    int weight = 0;
    return find(currentNode, null, weight);
}

private int find(Node currentNode, Node pastNode, int weight) throws LinkException {
    for (Node futureNode : currentNode.getLinks()) {
        if (currentNode == futureNode || futureNode == pastNode) {
            continue;
        }
        weight += currentNode.getLink(futureNode).getWeight();
        pastNode = currentNode;
        currentNode = futureNode;
        if (currentNode.getName().equals(destination)) { // Here we reach the destination
            break;
        } else {
            find(currentNode, pastNode, weight);
        }
     }
     return weight;
}

递归就是这样工作的。您有多个对
find()
的嵌套调用同时发生。当最里面的调用完成时,下一个最里面的调用将恢复其操作,并继续执行其
for
循环的下一个操作


顺便说一下,您忽略了对
find()
的递归调用的返回值。这看起来不对。

使用调试器来跟踪程序的流程。只需调试它就可以查看到底发生了什么。。。另外,您可以返回
weight
I在调试时观察到这种行为,而不是破坏。当到达return语句时,它会返回else分支并再次调用自身。除了理解发生这种情况的原因外,您可能还应该更改程序的工作方式:按原样,它可能会无限循环到三角形中的三个节点上,而找不到解。你应该检查已知的算法:所以我需要一个标志它从所有调用中退出?@locke:这取决于你试图实现的逻辑。