首先,到处都有许多示例代码可用于此问题。但是我的问题是关于它如何实现的,而不仅仅是结果。因此,请勿将其称为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);
}
}
答案 0 :(得分:1)
这是一个简单的递归调用,如@Stultuske所说。
您可以使用参数10调用函数printNos,并且在能够打印之前,请使用9调用printNos。跳转点将保存到堆栈中。这样,您到达参数“ 0”的“调用底部”将停止递归调用-printNos的第十个实例已关闭。之后,对堆栈进行处理,然后从第9个实例开始使用打印语句。参数为1。它被打印,此实例关闭。下一个是2,然后是3,依此类推。在最后一个打开的实例之后,该程序终止,并且您已打印了预期的结果。没有魔法:-)
在此处获取更多信息: