我正在读一本名为“Think Java:如何像计算机科学家一样思考”的书,最近我介绍了递归方法。
public static void countdown(int n)
{
if (n == 0) {
System.out.println("Blastoff!");
} else {
System.out.println(n);
countdown(n - 1);
}
}
这将是一个正常的递归方法,用于倒数到 0,我明白发生了什么,但是如果您像这样在 System.out.println 之前进行递归调用
public static void countdown(int n)
{
if (n == 0) {
System.out.println("Blastoff!");
} else {
countdown(n - 1);
System.out.println(n);
}
}
它的计数方式相反,所以如果我为这两个条件语句给出参数 3,则第一个为“3, 2, 1,Blastoff!”但第二个 1 是“Blastoff,1 ,2 ,3”....我不明白这是如何工作的,有人可以尝试解释这段代码中发生了什么,使其以相反的方式计数吗?
最佳答案
我会尽力为您想象它。
第一种方法
countdown(3) (first call)
"3" (sysout)
countdown(3-1) (second call)
"2" (sysout)
countdown(2-1) (third call)
"1" (sysout)
countdown(1-1) (fourth call)
"Blastoff!" (n == 0)
第二种方法
countdown(3) (first call)
countdown(3-1) (second call)
countdown(2-1) (third call)
countdown(1-1) (fourth call)
"Blastoff!" (n == 0. going back up call stack)
"1" (sysout)
"2" (sysout)
"3" (sysout)
关于java - 逆向递归java方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39090468/