函式自己呼叫自己本身
method()
或methoda
methodb()
將乙個複雜的問題分解成幾個相同的簡單問題
遞迴需要出口
在進行迴圈時,每當一次迴圈結束,迴圈的結果作為下次迴圈的初始值,而上次迴圈占用的記憶體就會被系統釋放。因此迴圈可以沒有出口而不停無限迴圈下去。
而在進行遞迴時,程式是按層次進行下去的。每次函式執行到呼叫自身時,都會進行下一層,而上次的函式是沒有執行完畢的。因此,每一輪得到的值都會存在記憶體中而不被釋放。就像檢索乙個檔案時,要先從最上層開始,一層一層向下檢索,在未檢索到目的檔案之前,上層開啟的資料夾一直都不會關閉。
因此,遞迴雖然相比於迴圈來說,遞迴演算法的**複雜度明顯減小,但消耗的代價則是大量的記憶體。因此,當寫乙個遞迴程式時,必須新增出口,否則當記憶體被佔滿時就會報錯。
1),可以分解成幾個情況相同的問題;
2),必須有乙個退出出口,否則就會因為記憶體被占用光而出現堆疊溢位
1),遞推 —— 函式呼叫自己的部分
2),回歸 —— 函式中遞推之外的部分
1,1+2+....+n
//遞迴(累加1到n)
package recursion;
public class recursion
else
} public static void main(string args)
}
2,乘法表(迴圈)
package recursion;
public class multiplication
system.out.println();
} return m;
} public static void main(string args)
}
3,乘法表(遞迴)
package recursion;
public class multi_recursion
else
system.out.println();
} }public static void main(string args)
}
4,斐波那契數列
package recursion;
public class fibonacci
} public static void main(string args)
}
5,漢諾塔(遞迴)—— 將n個盤子從p1移動到p3
public class hanotower
else
} public static void main(string args)
}
遞迴的思想與應用
遞迴是一種數學上分而自治的思想,將原問題分解為規模較小的問題進行處理,分解後的問題與原問題的型別完全相同,但規模較小,通過小規模問題的解,能夠輕易求得原問題的解,但是問題的分解是有限的,當邊界條件滿足時,遞迴結束直接求解否則遞迴繼續進行,在程式設計中遞迴函式就是遞迴的體現,遞迴模型的一般表示法如下 ...
六 遞迴的思想與應用
遞迴是一種數學上分而治之的思想 將原問題分解為規模較小的問題進行處理 分解後的問題與原問題的型別完全相同,但規模較小 通過小規模問題的分解,能夠輕易求得原問題的解 問題的分解是有限的 遞迴不能無限進行 當邊界條件不滿足時,分解問題 遞迴繼續進行 當邊界條件滿足時,直接求解 遞迴結束 遞迴在程式設計中...
43 遞迴的思想與應用1
遞迴是一種數學上分而自治的思想 將原問題分解為規模較小的問題進行處理。分解後的問題與原問題的型別完全相同,但規模較小。通過小規模問題的求解,能夠輕易求得原問題的解。問題的分解是有限的 遞迴不能無限進行 當邊界條件不滿足時,分解問題 遞迴繼續進行 當邊界條件滿足時,直接求解 遞迴結束 地規模型的一般表...