我正在读一本名为"思考Java:如何像计算机科学家一样思考"的书,我最近介绍了递归方法.
public static void countdown(int n)
{
if (n == 0) {
System.out.println("Blastoff!");
} else {
System.out.println(n);
countdown(n - 1);
}
}
Run Code Online (Sandbox Code Playgroud)
这将是一个正常的递归方法,用于倒数到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);
}
}
Run Code Online (Sandbox Code Playgroud)
它以相反的方式计算,所以如果我为这两个条件语句给出参数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)
Run Code Online (Sandbox Code Playgroud)
第二种方法
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)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
393 次 |
| 最近记录: |