1

地図上の 2 点間の経路を見つけようとしています。

ループから抜け出して重みを返すと、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 に答える