Java中的遞迴
阿新 • • 發佈:2018-12-18
1、關於遞迴的認知
程式呼叫自身的程式設計技巧稱為遞迴( recursion)。遞迴做為一種演算法在程式設計語言中廣泛應用。 一個過程或函式在其定義或說明中有直接或間接呼叫自身的一種方法,它通常把一個大型複雜的問題層層轉化為一個與原問題相似的規模較小的問題來求解,遞迴策略只需少量的程式就可描述出解題過程所需要的多次重複計算,大大地減少了程式的程式碼量。遞迴的能力在於用有限的語句來定義物件的無限集合。一般來說,遞迴需要有邊界條件、遞迴前進段和遞迴返回段。當邊界條件不滿足時,遞迴前進;當邊界條件滿足時,遞迴返回。
構成遞迴需具備的條件:
- 子問題須與原始問題為同樣的事,且更為簡單;
- 不能無限制地呼叫本身,須有個出口,化簡為非遞迴狀況處理。
2、遞迴方法的應用
(一)Fibonacci數列
Fibonacci數的遞推公式為:F(0)=F(1)=1,F(n)=F(n-1)+F(n-2) n>=2。
程式碼實現
public static int fibonnaci(int n) { int tmp = 1; if (n == 1||n == 2){ tmp = 1; return 1; } else { tmp = fibonnaci(n - 1) + fibonnaci(n - 2); return tmp; } }
(二)二分法查詢
二分法查詢的遞迴公式為: if (key > array[mid]){ return twoPointLookup(array,key,mid + 1,right); } else { return twoPointLookup(array,key,left,mid - 1); }
程式碼實現
public static int twoPointLookup(int[] array,int key,int left,int right) { int mid = (left+right) >> 1; if (left > right){ return -1; } if (key == array[mid]){ return mid; } else { if (key > array[mid]){ return twoPointLookup(array,key,mid + 1,right); } else { return twoPointLookup(array,key,left,mid - 1); } } }