[英]How does this code work(simple java recursion)?
我在理解遞歸時遇到了麻煩。 我了解理論。 就像當一個函數調用自身時一樣,需要一個基本的情況來結束遞歸,而在程序中使用它時,一切都讓我感到困惑。 例如,我在下面發布了一些代碼。 當我在遞歸函數之前調用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
}
}
在這里,“桌面檢查”(筆和紙)之類的東西非常方便,因此您可以逐步執行代碼並在每個步驟中描述狀態。
本質上,直到printNumbers
方法返回時才調用第二條打印語句,這意味着您的執行類似於...
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)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.