1. 程式人生 > >用程式碼解釋遞迴與迴圈的比較

用程式碼解釋遞迴與迴圈的比較

遞迴編碼:

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)遞迴通常是逆向思維居多,“遞”和“歸”不一定容易發現(比較難以理解);而迴圈從開始條件到結束條件,包括中間迴圈變數,都需要表達出來(比較簡潔明瞭)。

簡單的來說就是:用迴圈能實現的,遞迴一般可以實現,但是能用遞迴實現的,迴圈不一定能。因為有些題目①只注重迴圈的結束條件和迴圈過程,而往往這個結束條件不易表達(也就是說用迴圈並不好寫);②只注重迴圈的次數而不注重迴圈的開始條件和結束條件(這個迴圈更加無從下手了)。