在递归中继续关键字

时间:2013-02-08 18:04:45

标签: java recursion

我在搜索一些答案时遇到了以下代码。

public static void recurse(Scanner in, HashMap<String, Integer> oldMap) {
    HashMap<String, Integer> map = null;
    if (oldMap == null) 
        map = new HashMap<String, Integer>();
    else
        map = new HashMap<String, Integer>(oldMap);
    while (in.hasNext) {
        String s = in.nextLine();
        if (s.startsWith("[")) {
            recurse(in, map);
            continue;
        }
        if (s.startsWith("]")) {
            break;
        }
        String[] split = s.split(" ");
        if (s.startsWith("print")) {
            System.out.println(map.containsKey(split[1]) ? map.get(split[1]) : 0);
            continue;
        }
        int x = 0;
        try {
            x = Integer.parse(split[1]);
        } catch (Exception e) {
            x = map.containsKey(split[1]) ? map.get(split[1]) : 0;
        }
        map.put(split[0], x);
    }
}

有人可以解释一下,为什么这个人在递归电话后使用了继续。似乎是因为每次处理递归调用都不会处理continue。

2 个答案:

答案 0 :(得分:4)

确实会处理递归调用 - 但最终,递归调用将返回。 (除非它引发异常或进入无限循环,否则。)在递归调用返回后,执行continue语句。

这可能有助于您使用更简单的递归示例:

public void printOneToN(int n) {
    if(n > 1) {
        printOneToN(n - 1);
    }
    System.out.println(n);
}

正如您通过运行(说)printOneToN(10)所看到的,在每次递归调用之后,控制权返回其调用者。递归调用不会替换其调用者。

答案 1 :(得分:1)

continue与递归调用无关;其效果是跳过while循环的其余内容并直接返回in.hasNext()

相关问题