【问题标题】:recursive method doesn't work递归方法不起作用
【发布时间】:2012-05-03 00:59:09
【问题描述】:

我对填充结构LinkedHashMap<String,LinkedHashMap<String, Integer>> 的递归方法有疑问。我不知道最后一次返回中的函数调用是否在正确的位置 - 我现在尝试将它放在三个不同的位置:

public static LinkedHashMap<String, LinkedHashMap<String, Integer>> GetXMLRegularExpression(
        Node node, LinkedHashMap<String, LinkedHashMap<String, Integer>> a) {
    List<Element> children = getChildren(node);
    List<String> childrenString = ConversionString(children);
    List<String> Clear = RemoveDuplicate(children);
    LinkedHashMap<String, Integer> lhm = new LinkedHashMap<String, Integer>();

    // System.out.println(childrenString);
    if (!isLeaf(node)) {
        for (int i = 0; i < Clear.size(); i++) {
            int count = NumberOfAppear(childrenString, Clear.get(i));
            lhm.put(Clear.get(i), count);
        }
        a.put(node.getNodeName(), lhm);
        return a;

    } else {
        lhm.put(node.getNodeName(), 0);
        a.put(node.getNodeName(), lhm);
        return a;
    }

    for (int j = 0; j < children.size(); j++) {
        return GetXMLRegularExpression(children.get(j), a);
    }
}

【问题讨论】:

  • isLeaf(node) 是做什么的?我可以想象,但是查看您调用的方法的代码会很有帮助,但人们可能不熟悉。

标签: java algorithm list recursion linked-list


【解决方案1】:

代码看起来有问题。您在循环中嵌入了“return”语句,这很奇怪。您是否尝试从此函数返回多个值?在循环的第 1 次迭代中,将执行“return”语句,结束此函数的执行。

【讨论】:

  • 这也是真的,但甚至没有达到代码; "if" 和 "else" 都有一个 return 语句,因此可以执行 for 循环之前的其中一个返回。
  • 没错!感谢您指出这一点。读完问题后,我跳到了最后一个返回。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-09
  • 1970-01-01
  • 2011-01-19
  • 2017-01-13
相关资源
最近更新 更多