【发布时间】: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开始
-
尝试画出特定线条的触发方式(例如图表或其他)。这可能会帮助您了解发生这种情况的原因。
-
我建议阅读一下什么是递归以及它是如何工作的。您还需要了解调用堆栈是什么。