我目前正在學習Java遞歸。我已經做了一些練習的代碼。問題遞歸 - 我不明白爲什麼我得到一個反向輸出
public class Tester{
public static void main(String[] args){
rec(5);
}
public static void rec(int x){
if(x<=0){
return;
}else{
System.out.print(x+" ");
rec(x-1);
}
}
}
// Output: 5 4 3 2 1
但如果我現在切換System.out.print(x+" ");
與rec(x-1);
,我得到一個完全不同的輸出,即反向:1 2 3 4 5
這怎麼可能呢?我理解它是這樣的:
我們有整數5
,我們通過該方法。 if語句不適用,所以我們將5
減去1
,並且我們有x=4
,我們重複該方法(未達到打印,因此不打印任何內容)。如上所述,我們與x=4
一樣。如果聲明不適用,我們將4
減少1
並重復該方法。我們重複,直到我們有x=0
。在這種情況下,我們返回,所以這是方法的結束。我完全不明白我們有什麼反向輸出,我甚至不明白爲什麼我們有輸出......? :■
哦......對不起,我沒有讀過上一行。解決方案是由於堆棧遞歸工作!當您調用遞歸函數時,函數的當前狀態將存儲在堆棧中。當函數返回時,當前狀態被恢復並且剩餘部分被執行。 –