我正在尝试在地图上的两个点之间找到一条路径。
当它退出循环并返回权重时,它将转到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()
的递归调用的返回值。看起来不对。
关于java - 递归查找路径,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13601630/