標籤:遞迴 java
1.理解 對於遞迴函式的理解,我覺得是比較重要的,因為很多大神能把遞迴函式用的惟妙惟肖,不光是他們的編程功力高深,更主要是能理解這個演算法。比較直白的理解是,如果一個事件的邏輯可以表示成,f(x)=nf(x-1)+o(x)形式,那麼就可以用遞迴的思路來實現。
編寫遞迴邏輯的時候要知道如下法則:1.要有基準 比如說,f(x)=f(x-1)+1,如果不加入基準,f(0)的值是多少,那麼函數會無限執行下去,沒有意義2.不斷推進 也就是f(x)=f(x-1)或是f(x)=f(x/n)之類的 當然每個遞迴函式會有一個比較神奇的步驟,就是回溯步驟,比方說: fact(3) ----- fact(2) ----- fact(1) ------ fact(2) -----fact(3) ------------------------------> ------------------------------>
遞迴 回溯
2.執行個體實現
求 的計算和f(x)=0,首先列出公式f(x)=f(x-1)+x/(4**x) (兩個**表示次方,python用慣了),得到下面的代碼
public class Recursion { public static void main(String args[]){ System.out.print(f(2)); } public static double f(int x){ if (x==0){ return 0; } else{ return f(x-1)+x/Math.pow(4,x); } }}
結果是:f(2)=0.375,驗證正確
3.時間複雜度計算
以上題為例,將f(x)=f(x-1)+x/(4**x)展開,
將f(x)乘以4相減,得,設4的x方等於k,則原式時間複雜度,log以4為底。
參考:http://blog.csdn.net/budapest/article/details/6367973
/********************************
* 本文來自部落格 “李博Garvin“
* 轉載請標明出處:http://blog.csdn.net/buptgshengod
******************************************/
【演算法資料結構Java實現】遞迴的簡單剖析及時間複雜度計算