回顧我的筆記,並想知道如果任何人有什麼下面發生的簡要說明:基本遞歸與如果else語句(JAVA)
public class HelloWorld{
public static void main(String[]args){
helloWorld(10);
}
public static void helloWorld(int n){
if(n > 0){
System.out.println("HelloWorld! " + n);
helloWorld(n-1);
}
System.out.println("GoodBye from " + n);
}
}
輸出:
HelloWorld! 10
HelloWorld! 9
HelloWorld! 8
HelloWorld! 7
HelloWorld! 6
HelloWorld! 5
HelloWorld! 4
HelloWorld! 3
HelloWorld! 2
HelloWorld! 1
GoodBye from 0
GoodBye from 1
GoodBye from 2
GoodBye from 3
GoodBye from 4
GoodBye from 5
GoodBye from 6
GoodBye from 7
GoodBye from 8
GoodBye from 9
GoodBye from 10
只是要清楚,我完全理解了遞歸和調用堆棧展開的情況。我的問題是關於什麼發生在我包括下面的else語句:
public static void helloWorld(int n){
if(n > 0){
System.out.println("HelloWorld! " + n);
helloWorld(n-1);
}else{
System.out.println("GoodBye from " + n);
}
}
輸出:
HelloWorld! 10
HelloWorld! 9
HelloWorld! 8
HelloWorld! 7
HelloWorld! 6
HelloWorld! 5
HelloWorld! 4
HelloWorld! 3
HelloWorld! 2
HelloWorld! 1
GoodBye from 0
爲什麼調用堆棧出現,當它擊中else語句不放鬆?
爲什麼只有當n爲0(或更小)時纔會打印再見1-10? – Dukeling
當它進入'if'語句時,你爲什麼期望它執行else語句呢? –
0只能達到一次,因此只有一次執行else分支。在兩個版本中堆棧解繞發生了11次,只有沒有'else'添加了10個額外的打印。 –