使用递归调用继续存储变量值

时间:2015-11-23 09:16:38

标签: java recursion

我有下面的contains方法来检查基数trie数据结构中是否有单词可用。要查找我在这里使用的单词,请调用方法contains的recursiv调用。但是,当我向上移动变量available的值被更改为false时,我发现这个过程将布尔变量true存储为available时遇到问题。 / p>

如果available变量被赋值为true,我怎样才能保留真值?

代码:

private boolean contains(TrieNode node, String s) {
    boolean available = false;
    String communsubString = checkEdgeString(node.getNext(), s);
    String restString = s.substring(communsubString.length());
    if (node.getNext() != null && !node.getNext().isEmpty()) {
        for (TrieNode nextNodeEdge : node.getNext()) {
            if (nextNodeEdge.getEdge().equals(communsubString)) {
                if (!restString.isEmpty()) {
                    contains(nextNodeEdge, restString);

                } else { 
                    // I want to keep the true value if I was here once.
                    available = true;
                }


            }

        }
    }
    return available;
}

2 个答案:

答案 0 :(得分:1)

您可以将didPressCancel的当前值与调用available的结果进行或:

contains

然后你可以做一些快速休息以更快地返回,所以你不必继续检查其他节点,因为它们永远不会使值为false:

available |= contains(nextNodeEdge, restString);

或更简洁:

if (!restString.isEmpty()) {
  available |= contains(nextNodeEdge, restString);
} else { 
  // I want to keep the true value if I was here once.
  available = true;
}
if (available) break;

答案 1 :(得分:1)

一旦你找到了什么,就可以一直回归:

private boolean contains(TrieNode node, String s) {
String communsubString = checkEdgeString(node.getNext(), s);
String restString = s.substring(communsubString.length());
if (node.getNext() != null && !node.getNext().isEmpty()) {
    for (TrieNode nextNodeEdge : node.getNext()) {
        if (nextNodeEdge.getEdge().equals(communsubString)) {
            if (!restString.isEmpty()) {
                if ( contains(nextNodeEdge, restString) ) {
                      return true;
                }

            } else { 
                return true;
            }


        }

    }
}
return false;
}