Java資料結構和演算法(六) 遞迴

2021-08-19 14:18:06 字數 1544 閱讀 7427

遞迴,就是在執行的過程中呼叫自己。

遞迴必須要有三個要素:

①、邊界條件

②、遞迴前進段

③、遞迴返回段

當邊界條件不滿足時,遞迴前進;當邊界條件滿足時,遞迴返回。

利用遞迴求乙個數的階乘

n! = n*(n-1)*(n-2)*......1

規定:①、0!=1

②、1!=1

③、負數沒有階乘

//利用遞迴進行求乙個數的乘層

public static int getfactorialfor(int n)else

}

遞迴的二分查詢

注意:二分查詢的陣列一定是有序的!!!

在有序陣列array中,不斷將陣列的中間值(mid)和被查詢的值比較,如果被查詢的值等於array[mid],就返回下標mid; 否則,就將查詢範圍縮小一半。如果被查詢的值小於array[mid], 就繼續在左半邊查詢;如果被查詢的值大於array[mid],  就繼續在右半邊查詢。 直到查詢到該值或者查詢範圍為空時, 查詢結束。

//利用遞迴進行二分查詢

public static int findtwopoint(int array,int key,int low,int height)

if(array[mid] == key)else if(array[mid] > key)else if(array[mid] < key)

return -1;

}

歸併排序

歸併演算法的中心是歸併兩個已經有序的陣列。歸併兩個有序陣列a和b,就生成了第三個有序陣列c。陣列c包含陣列a和b的所有資料項。

歸併排序的思想是把乙個陣列分成兩半,排序每一半,然後用上面的sort()方法將陣列的兩半歸併成為乙個有序的陣列。如何來為每一部分排序呢?這裡我們利用遞迴的思想:

把每一半都分為四分之一,對每個四分之一進行排序,然後把它們歸併成乙個有序的一半。類似的,如何給每個四分之一陣列排序呢?把每個四分之一分成八分之一,對每個八分之一進行排序,以此類推,反覆的分割陣列,直到得到的子陣列是乙個資料項,那這就是這個遞迴演算法的邊界值,也就是假定乙個資料項的元素是有序的。

public static int mergesort(int c,int start,int last)

return c;

}public static void merge(int c,int start,int mid,int last)else

}//把左邊剩餘陣列元素移入新陣列中

while(i <= mid)

//把右邊剩餘陣列元素移入到新陣列中

while(j <= last)

//把新陣列中的數覆蓋到c陣列中

for(int k2 = 0 ; k2 < temp.length ; k2++)

}



Java資料結構與演算法 遞迴和回溯

任何呼叫自身的函式成為遞迴。遞迴是從跟數學領域借鑑過來的一種有用的技術,遞迴 通常比迭代 更加簡潔易懂。以階乘喂例,其遞迴定義如下 n 1 n 0 n n n 1 n 0 複製 實現 public static void main string args static int fact int n ...

資料結構和演算法 遞迴

標籤 空格分隔 資料結構和演算法 include int main return 0 include int fib int i int main 例計算 n 的階乘 n include int factorial n int main 例編寫乙個遞迴函式,實現將輸入的任意長度的字串反向輸出的功能。...

資料結構和演算法 遞迴

遞迴,其實就是自己呼叫自己,實現乙個不斷重複的工作,直接上 給你們講解一下,應該就明白遞迴是什麼東東了,遞迴其實也是一種迴圈,他也是有終止條件的,否則就變成了死迴圈,這個 的終止條件就是 因為這裡就沒有再次呼叫自己,所以就終止了。從這個 我們也可以看出來,這裡的遞迴就實現了抱著,我的,這兩個詞語的多...