Java递归性误解
我不理解这段代码,为什么它会算数。如果我用递归调用更改print语句中的顺序,这对我来说是有意义的,但这就是它计数的原因。在by book中,它说“System.out.println发生在每个递归调用返回之前。因此,它是向上计数而不是向下计数。”我不理解这一点。谢谢你的帮助Java递归性误解,java,Java,我不理解这段代码,为什么它会算数。如果我用递归调用更改print语句中的顺序,这对我来说是有意义的,但这就是它计数的原因。在by book中,它说“System.out.println发生在每个递归调用返回之前。因此,它是向上计数而不是向下计数。”我不理解这一点。谢谢你的帮助 public static void countdown(int n) { if (n == 0) { System.out
public static void countdown(int n)
{
if (n == 0)
{
System.out.println("Blastoff!");
}
else
{
countdown(n - 1);
System.out.println(n);
}
}
那么,如果n!=0,您的程序在“else”块中运行代码,其中是对方法倒计时(n-1)的另一个调用。例如,如果输入n=3,只要n>0,此代码就会运行。因此,基本上运行自己运行的方法,如下所示:
倒计时(3)调用方法倒计时(2),然后倒计时(2)调用倒计时(1)。只要n大于0,就会发生这种情况。如果n==0,它将打印您的消息。因此,如果n!=0,您的程序在“else”块中运行代码,其中是对方法倒计时(n-1)的另一个调用。例如,如果输入n=3,只要n>0,此代码就会运行。因此,基本上运行自己运行的方法,如下所示:
倒计时(3)调用方法倒计时(2),然后倒计时(2)调用倒计时(1)。只要n大于0,就会发生这种情况。如果n==0,它将打印您的消息。您应该将条件“n==0”更改为“n”您应该将条件“n==0”更改为“n” 这的确是个数字。 让我们看看实际发生的情况:每个
倒计时
调用都会首先调用自身,甚至在将任何内容写入System.out
之前
在下面的示例中,假设我使用2
作为参数调用countdown
n==2
,因此执行else
块n==1
,因此执行else
块n==0
因此if条件为true,所以打印“Blastoff!”n
n
,其值为2n
。因此,输出为:
起飞!
1.
2.
正如所料。您可以看到,正如书中所说,在将某些内容打印到sysout之前,该方法会调用自身
这的确是个数字。
让我们看看实际发生的情况:每个倒计时
调用都会首先调用自身,甚至在将任何内容写入System.out
之前
在下面的示例中,假设我使用2
作为参数调用countdown
n==2
,因此执行else
块n==1
,因此执行else
块n==0
因此if条件为true,所以打印“Blastoff!”n
n
,其值为2n
。因此,输出为:
起飞!
1.
2.
正如所料。您可以看到,正如书中所说,该方法在将某些内容打印到sysout之前会调用自身。我刚刚运行了这个程序,它会倒计时?正如其名称所示,您的方法应该倒计时。如果您希望它计数,那么在打印“我不明白为什么我在main中调用它时这个方法计数”之前进行递归调用。它不计数,deom:。10, 9, 8, ... 正在倒计时。请澄清你的问题。@IvoVidovic我想他的意思是他想倒数,但他正在倒数。。不知道为什么,因为它实际上是倒计时的。请在外面附加调用倒计时(n)的行。我刚刚运行了这个,它倒计时?你的方法应该是倒计时,正如其名称所示。如果您希望它计数,那么在打印“我不明白为什么我在main中调用它时这个方法计数”之前进行递归调用。它不计数,deom:。10, 9, 8, ... 正在倒计时。请澄清你的问题。@IvoVidovic我想他的意思是他想倒数,但他正在倒数。。不知道为什么,因为它实际上是倒计时。请在外面附上一行,称为倒计时(n)。这是真的,我看不出这是对OP问题的回答(可能是因为问题不清楚,但仍然…)这是真的,我看不出它是对OP问题的回答(可能是因为问题不清楚,但仍然…)我不明白的是,为什么它以占优势的方式打印数字,以及背后的逻辑。当我切换打印和递归调用顺序时,我理解其主要目的的逻辑,它将倒计时,我看到它(机制)。因为这个方法首先运行自己,只要n!=0,因此它将在n==0时结束。所以,如果你在开始时放3个,它将运行4次。上次运行时(n==0),它打印System.out.println(“Blastoff!”);。然后,方法返回到上一级,在那里它以n=1运行,并打印System.out.println(1);-为什么?因为首先所有的方法都结束了,然后程序将运行并抛出其余的代码。然后,方法返回一个lev
countdown(n - 1);
System.out.println(n);