java - 尽早从递归函数返回值

标签 java recursion

我有一棵节点树。首先迭代此树深度时,我需要返回从根节点到当前节点的所有重复节点的列表。

由于某些业务需求,树的“已遍历”部分永远不会相同。我在树的已遍历部分中进行了大量的交换/替换分支。因此,维护遍历的节点列表可能不起作用,因为每次我完成遍历节点时它都需要更新。

所以每当我需要回答getDuplicateNodesOfMyCurrentNode()时我需要从树的顶部( rootNode )开始并深度优先搜索,直到我的 currentNode并返回 list<Nodes>这是我的 currentNode 的重复项.

private void getDuplicateNodesOfMyCurrentNode(Node parentNode, Node currentNode,List<Node> dupNodes){
  for(Node child: parentNode.getChildren()){
        if(child == currentNode){
            return;
        }
        if(child.getApp().equals(currentNode.getApp()){
            dupNodes.add(child);
        }
        getDuplicateNodesOfMyCurrentNode( child, currentNode, aDupNodes);

}

正如你们已经知道此代码的问题一样,return 不会将控制权返回给此 API 的调用者,因为它递归地调用自身。 一旦我到达我的currentNode,我想要某种方法退出这个递归循环。 .

我可能可以通过维护一些 boolean 状态来实现这一点,但想知道解决这个问题的更好方法。

最佳答案

通过 boolean 值通过调用堆栈传递是否中止递归,并在递归调用时如有必要放弃当前的 for 循环(也承认 Norbet van Nobelen 的上面的评论暗示了类似的事情):

private boolean getDuplicateNodesOfMyCurrentNode(Node parentNode, Node currentNode,List<Node> dupNodes){
    for(Node child: parentNode.getChildren()){
        if(child == currentNode){
            return false;
        }
        if(child.getApp().equals(currentNode.getApp()){
            dupNodes.add(child);
        }
        if (getDuplicateNodesOfMyCurrentNode( builtOn, currentNode, aDupNodes) == false){
            return false;
        }
    }
    return true;
}

关于java - 尽早从递归函数返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31444208/

相关文章:

javascript - javascript中的递归字符串反转函数?

c++ - 在 C++ 中递归到 main() 是否合法?

c++ - 求解斐波那契数列在函数中递归返回void

javascript - 递归函数中的 return 并不退出函数

java - NekoHTML SAX 片段解析

java - 在 Felix OSGi 包中包含依赖项

java - Spymemcached 和连接失败

java - 递归中字符串数组的排列

java - 登录 Activity 问题

java - Maven 找不到 web.xml