java - 递归中的continue关键字

标签 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。好像是不会处理continue,因为每次都会处理递归调用。

最佳答案

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

它可能会帮助您玩一个更简单的递归示例:

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

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

关于java - 递归中的continue关键字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14778671/

相关文章:

python - 为什么在 Scheme 和 Python 中实现的递归方程的返回值不同?

java - 如何找到具有相同值的所有相邻像素而不遇到当前的 StackOverflowError 问题?

java - 如何在运行时获取 .ear 文件大小?

java - 用于 Tomcat 的 Cloud Foundry Java Buildpack : how to change value in server. xml?

java - Guice注入(inject): parameter not explicity bound

java - 从单词中删除字符的算法,使得减少的单词仍然是字典中的单词

java - 链表排序方法在递归和比较列表中的元素时给出 StackOverFlow 错误

javascript - 在嵌套递归指令中将参数传递给父 Controller 方法

java - 处理长时间运行的清理逻辑以响应 Netty ChannelInactive 事件的正确方法?

java - 使用共享资源进行 War 文件部署