1

我试图在地图上的两点之间找到一条路径。

当它从循环中跳出并返回权重时,它会转到 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;
}
4

1 回答 1

2

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

顺便说一句,您忽略了对find(). 那看起来不对。

于 2012-11-28T09:25:45.470 回答