【问题标题】:Explanation for printing 1 to 10 in JavaJava中打印1到10的说明
【发布时间】:2019-03-26 18:56:26
【问题描述】:

首先,这个问题到处都有很多示例代码。然而,我的问题是关于它是如何实现的,而不仅仅是结果。所以请不要将其称为 DUPLICATE。

下面的代码成功打印了数字 1 到 10(注意:不是 10 到 1)。我尝试调试以了解它是如何工作的,但不清楚。

我在第 1、2、3 和 4 行有断点。在第 4 行之后,代码递归地转到第 1 行和第 2 行,直到 n 的值从 10 减小到 0。在 n 的值变为0,执行第 3 行以打印从 1 到 10 的所有数字。我不明白这是如何工作的。有人可以解释一下。

public class print1to10 {

    static void printNos(int n)
    {
1.      if(n > 0)
        {
2.          printNos(n - 1);
3.          System.out.print(n + " ");
        }
    }

    public static void main(String[] args)
    {
4.      printNos(10);
    }
}

【问题讨论】:

  • 这是一个简单的递归调用。你认为它是如何工作的?
  • n的值达到0后,如何只调用第3行来打印1到10的所有值是我无法理解的地方
  • 搜索Stack内存是如何工作的,从baeldung.com/java-recursion开始
  • 尝试画出特定线条的触发方式(例如图表或其他)。这可能会帮助您了解发生这种情况的原因。
  • 我建议阅读一下什么是递归以及它是如何工作的。您还需要了解调用堆栈是什么。

标签: java recursion


【解决方案1】:

这是一个简单的递归调用,就像@Stultuske 所说的那样。

你用参数 10 调用函数 printNos,在你能够打印它之前,你用 9 调用 printNos。跳转点被保存到堆栈中。通过这种方式,您可以使用参数 0 到达“调用底部”,这会停止递归调用 - printNos 的第 10 个实例已关闭。之后,堆栈处理完毕,您从第 9 个实例开始使用打印语句。参数是 1。它被打印出来并且这个实例被关闭。下一个是 2,然后是 3,依此类推。在最后一个打开的实例之后,程序终止并且您打印了预期的结果。没有魔法:-)

在此处获取更多信息:

https://simple.wikipedia.org/wiki/Recursion

How does recursion work?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-11
    • 1970-01-01
    • 1970-01-01
    • 2011-04-22
    • 2021-07-13
    • 2010-10-17
    相关资源
    最近更新 更多