什么叫遞歸呢?舉個栗子:
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除了用於返回值以外,還有結束程序的功能哦 } } }
遞歸結構的優缺點是什么?
- 優點:將問題逐漸簡單化,例如計算階乘
- 缺點:會占用大量的系統堆棧,內存耗用多,在遞歸調用層次多時速度比循環慢的多。