在Java

时间:2019-03-26 10:46:24

标签: java recursion

首先,到处都有许多示例代码可用于此问题。但是我的问题是关于它如何实现的,而不仅仅是结果。因此,请勿将其称为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);
    }
}

1 个答案:

答案 0 :(得分:1)

这是一个简单的递归调用,如@Stultuske所说。

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

在此处获取更多信息:

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

How does recursion work?