什么叫遞歸?遞歸算法中,遞歸頭和遞歸體分別指什么?


什么叫遞歸呢?舉個栗子:

 1 public class Recursion {
 3     public static void main(String[] args) {
 4         method();
 5     }
 6 
 7     public static void method() {
 8         System.out.println("測試遞歸");
 9         //調用方法自己就叫遞歸
10         method();
11     }
13 }                 

咱們運行上面那個程序,看看會得到什么結果,不多說,直接上圖

 我們看到,自己調用自己會造成死循環(不停的輸出),直到計算機受不了了(拋異常了)才會停止

 但是有時候我們又需要用遞歸結構,同時又不希望死循環,所以我們給他加上限制條件,告訴計算機何時開始調用自己(即遞歸體),何時不調用自己(遞歸結束條件)

那什么是遞歸頭?什么又是遞歸體呢?見下面改正之后的代碼(這次不會死循環了,即有了遞歸結束條件)

  • 遞歸頭:什么時候不調用自己方法,即遞歸的結束條件
  • 遞歸體:什么時候需要調用自己方法,即自己調用自己
public class Recursion {
    public static void main(String[] args) {
        method();
    }

    // 定義一個計數的變量count,作為遞歸結束的條件
    public static int count = 0;

    public static void method() {
        if (count++ < 10) {// 遞歸體
            System.out.println("測試遞歸");
            method();// 調用方法自己就叫遞歸
        } else {// 遞歸頭
            return;// 小提示:return除了用於返回值以外,還有結束程序的功能哦
        }
    }
}

 遞歸結構的優缺點是什么?

  • 優點:將問題逐漸簡單化,例如計算階乘
  • 缺點:會占用大量的系統堆棧,內存耗用多,在遞歸調用層次多時速度比循環慢的多。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM