我无法理解递归。我了解理论。就像当一个函数调用自身时一样,需要一个基本的情况来结束递归,而在程序中使用它时,一切都让我感到困惑。例如,我在下面发布了一些代码。当我在递归函数之前调用print函数..它以相反的顺序打印数字(54321),而在递归之后调用它时,它将打印为12345。为什么?
public class Main {
public static void main(String[] args) {
printNumbers(5);
}
public static void printNumbers(int num){
if(num==0) {
return;
}
System.out.println(num); // this prints 54321
printNumbers(num-1);
System.out.println(num);//this prints 12345
}
}
答案 0 :(得分:7)
在这里,诸如“办公桌检查”(笔和纸)之类的东西非常方便,因此您可以逐步检查代码并描述每一步的状态。
从本质上讲,直到printNumbers
方法返回之前,第二个print语句才会被调用,这意味着您的执行类似于...
printNumber(5)
num = 5
num == 0 = false
print num (5)
printNumbers(num - 1)
num = 4
num == 0 = false
print num (4)
printNumbers(num - 1)
num = 3
num == 0 = false
print num (3)
printNumbers(num - 1)
num = 2
num == 0 = false
print num (2)
printNumbers(num - 1)
num = 1
num == 0 = false
print num (1)
printNumbers(num - 1)
num = 0
num == 0 = true (return)
print num (1)
print num (2)
print num (3)
print num (4)
print num (5)