用程式碼解釋遞迴與迴圈的比較
遞迴編碼:
public class Application { public static void main(String[] args) { //n隨便寫1個int型別的數 int num= Fun(6); System.out.println(num); // SpringApplication.run(Application.class, args); //求1+2+3+…+n的和,遞迴方法寫出程式碼 } public static int Fun(int n) { if (n == 1) { return 1; } else { return n + Fun(n - 1); } } } 測試結果: 21 21 Process finished with exit code 0
迴圈編碼: public class Application {
public static void main(String[] args) { //n隨便寫1個int型別的數 int total= Fun(6); System.out.println(total); // SpringApplication.run(Application.class, args); //求1+2+3+...+n的和,遞迴方法寫出程式碼 } public static int Fun(int n) { int i=0,sum=0; while(i<=n){ sum+=i; i++; } return sum; }
} 測試結果: 21 21 Process finished with exit code 0
總結:文字解釋了(可以不用往下看了) 遞迴:無限呼叫自身這個函式,每次呼叫總會改動一個關鍵變數,直到這個關鍵變數達到邊界的時候,不再呼叫。
遞迴與迴圈的區別與聯絡 相同點: (1)都是通過控制一個變數的邊界(或者多個),來改變多個變數為了得到所需要的值,而反覆而執行的; (2)都是按照預先設計好的推斷實現某一個值求取;(請注意,在這裡迴圈要更注重過程,而遞迴偏結果一點)
不同點: (1)遞迴通常是逆向思維居多,“遞”和“歸”不一定容易發現(比較難以理解);而迴圈從開始條件到結束條件,包括中間迴圈變數,都需要表達出來(比較簡潔明瞭)。
簡單的來說就是:用迴圈能實現的,遞迴一般可以實現,但是能用遞迴實現的,迴圈不一定能。因為有些題目①只注重迴圈的結束條件和迴圈過程,而往往這個結束條件不易表達(也就是說用迴圈並不好寫);②只注重迴圈的次數而不注重迴圈的開始條件和結束條件(這個迴圈更加無從下手了)。