建立java遞歸的方法:先建立明確的遞迴結束條件;然後設定判斷條件,程式碼為【private static int sumNum(int n){if (n == 1){return 1;}return n sumNum(n-1)}】。
建立java遞歸的方法:
程式呼叫自身的程式設計技巧稱為遞迴( recursion)。遞歸做為一種演算法在程式設計語言中廣泛應用。一個過程或函數在其定義或說明中有直接或間接調用自身的一種方法,它通常把一個大型複雜的問題層層轉化為一個與原問題相似的規模較小的問題來求解,遞歸策略只需少量的程序就可描述解題過程所需的多次重複計算,大大減少了程式的程式碼量。遞歸的能力在於用有限的語句來定義物件的無限集合。一般來說,遞歸需要有邊界條件、遞歸前進段和遞迴返回段。當邊界條件不滿足時,遞歸前進;當邊界條件滿足時,遞歸返回。
首先,我們來看看最簡單的求和範例。
<span style="font-size:18px;">public static void main(String[] args) { System.out.println(sumNum(100)); //输出:5050 } //求1-100的和 private static int sumNum(int n) { if (n == 1) { return 1; } return n + sumNum(n-1); }</span>
下面我們用遞歸實作斐波那契數列。
斐波那契數列,又稱黃金分割數列,指的是這樣一個數列:0、1、1、2、3、5、8、13、21、……在數學上,斐波納契數列以以下被以遞歸的方法定義:F(0)=0,F(1)=1,F(n)=F(n-1) F(n-2)(n≥2,n ∈N*)在現代物理、準晶體結構、化學等領域,斐波納契數列都有直接的應用。
//用递归求解 public static int fib(int n) { if (n == 0) return 0; if (n == 1 || n == 2) return 1; return fib(n - 1) + fib(n - 2); } //用循环求解 public static int fib2(int n) { int a = 0, b = 1, c = 1; if (n == 0) return 0; if (n == 1 || n == 2) return 1; for (int i = 0; i < n - 1; i++) { c = a + b; a = b; b = c; } return c; } //用数组求解 public static int fib3(int n) { int[] arr = new int[n + 1]; arr[0] = 0; arr[1] = 1; for (int i = 2; i <= n; i++) { arr[i] = arr[i - 1] + arr[i - 2]; } return arr[n]; }
下面再來看另外一個例子,計算階乘。
階乘是基斯頓·卡曼(Christian Kramp,1760~1826)於 1808 年發明的運算符號,是 數學術語。
一個正整數的 階乘( 英文: factorial)是所有小於及等於該數的 正整數的 積,且有0的階乘為1。自然數n的階乘寫作n!。亦即n!=1×2×3×...×n。階乘也可以 遞歸 方式定義:0!=1,n!=(n-1)!×n。
//用递归计算阶乘 public static int jc(int n) { //结束条件 if ( n == 1) return 1; //递归条件 return n * jc(n-1); } //用for循环实现阶乘 public static int jc2(int n) { int sum = 1; for (int i = 1; i <= n; i++) { sum *= i; } return sum; }
遞迴的條件:
1、 結束條件: 必須有一個明確的遞歸結束條件,稱為遞迴出口。
2、 遞迴條件: 遞迴的運演算法則.
遞歸的特點:
1、簡潔明了: 遞迴演算法,一般讓人一眼就能看出運算結構,很接近數學自然語言。
2、記憶體消耗大:在遞歸呼叫的過程當中系統為每一層的返回點、局部量等開闢了堆疊來儲存。遞歸次數過多容易造成棧溢位等。所以一般不提倡用遞歸演算法設計程序。
#相關學習推薦:java基礎教學
以上是java遞歸簡單例子如何創建的詳細內容。更多資訊請關注PHP中文網其他相關文章!