java - 逆向递归java方法

标签 java recursion

我正在读一本名为“Think Java:如何像计算机科学家一样思考”的书,最近我介绍了递归方法。

public static void countdown(int n)
{
  if (n == 0) {
      System.out.println("Blastoff!");
  } else {
      System.out.println(n);
      countdown(n - 1);
  }
}

这将是一个正常的递归方法,用于倒数到 0,我明白发生了什么,但是如果您像这样在 System.out.println 之前进行递归调用

public static void countdown(int n)
{
  if (n == 0) {
      System.out.println("Blastoff!");
  } else {
      countdown(n - 1);
      System.out.println(n);
  }
}

它的计数方式相反,所以如果我为这两个条件语句给出参数 3,则第一个为“3, 2, 1,Blastoff!”但第二个 1 是“Blastoff,1 ,2 ,3”....我不明白这是如何工作的,有人可以尝试解释这段代码中发生了什么,使其以相反的方式计数吗?

最佳答案

我会尽力为您想象它。

第一种方法

countdown(3)                (first call)
"3"                         (sysout)
    countdown(3-1)          (second call)
    "2"                     (sysout)
        countdown(2-1)      (third call)
        "1"                 (sysout)
            countdown(1-1)  (fourth call)
                "Blastoff!" (n == 0)

第二种方法

countdown(3)                (first call)
    countdown(3-1)          (second call)
        countdown(2-1)      (third call)
            countdown(1-1)  (fourth call)
                "Blastoff!" (n == 0. going back up call stack)
            "1"             (sysout)
        "2"                 (sysout)
    "3"                     (sysout)

关于java - 逆向递归java方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39090468/

相关文章:

java事件和监听器,执行不好?

java - 使用 Java http 请求进行 Twitch 身份验证

c - 仅使用递归如何实现 O(log n) 幂函数 a^n ?

C 编程 - 检查游戏板的所有有效解决方案

java - 如何在java非递归中搜索一般树中的节点

java - Java中的递归动态规划背包解决方案

JAVA_HOME 不指向 JDK

java - 如何在运行时运行特定的junit测试

Javascript - 您可以使用 .shift() 在递归过程中更改数组吗?

java - 使用 scomp 工具时如何导入其他模式 jar