Java递归性误解
我不理解这段代码,为什么它会算数。如果我用递归调用更改print语句中的顺序,这对我来说是有意义的,但这就是它计数的原因。在by book中,它说“System.out.println发生在每个递归调用返回之前。因此,它是向上计数而不是向下计数。”我不明白。谢谢你的帮助
public static void countdown(int n)
{
if (n == 0)
{
System.out.println("Blastoff!");
}
else
{
countdown(n - 1);
System.out.println(n);
}
}
# 1 楼答案
您应该将条件“n==0”更改为“n<=0'. 因为若你们传递负值,它就不会停止,你们可能会看到负数
假设你通过了n=-3。然后它会继续打印-3,-4。。。等等
# 2 楼答案
那么,如果n!=0,您的程序在“else”块中运行代码,其中是对方法倒计时(n-1)的另一个调用。例如,如果输入n=3,则只要n>;0.因此,基本上运行自己运行的方法,如下所示:
倒计时(3)调用方法倒计时(2),然后倒计时(2)调用倒计时(1)。只要n大于0,就会发生这种情况。如果n==0,它将打印您的消息
# 3 楼答案
这确实是一个数字强>
让我们看看实际发生的事情:每一个^ {CD1>}调用第一个调用本身,甚至在任何写到^ {CD2>}之前。p>
在下面的示例中,假设我使用
2
作为参数调用countdown
countdown(2)
被调用n == 2
,所以执行else
块countdown(1)
被调用n == 1
,所以执行else
块countdown(0)
被调用n == 0
因此if条件为true,所以“Blastoff!”已打印n
被打印,其值为2李>请注意,每个方法调用都有自己的局部变量,如
n
。因此,输出为:正如所料。您可以看到,正如书中所说,在将某些内容打印到sysout之前,该方法会调用自身