原理來自百度百科java
程序調用自身的編程技巧稱爲遞歸( recursion)。遞歸作爲一種算法在程序設計語言中普遍應用。 一個過程或函數在其定義或說明中有直接或間接調用自身的一種方法,它一般把一個大型複雜的問題層層轉化爲一個與原問題類似的規模較小的問題來求解,遞歸策略只需少許的程序就可描述出解題過程所須要的屢次重複計算,大大地減小了程序的代碼量。遞歸的能力在於用有限的語句來定義對象的無限集合。通常來講,遞歸須要有邊界條件、遞歸前進段和遞歸返回段。當邊界條件不知足時,遞歸前進;當邊界條件知足時,遞歸返回。算法
package com.jalja.org.algorithm; public class DiGui { public static void main(String[] args) { test(0); } public static void test(int i) { if(i<5) {// 遞歸邊界 System.out.println("Hello start:"+i);//遞歸前進段 test(++i); System.out.println("Hello end:"+i);//遞歸回歸段 } } }
Hello start:0 Hello start:1 Hello start:2 Hello start:3 Hello start:4 Hello end:5 Hello end:4 Hello end:3 Hello end:2 Hello end:1
注意:在JAVA中方法的調用和局部變量是發生在棧中,若是遞歸過深,變量只入棧不出棧,會出現java.lang.StackOverFlowError。 經過 -Xss128k:設置每一個線程的堆棧大小。 JDK5.0之後每一個線程堆棧大小爲1M,之前每一個線程堆棧大小爲256K,根據應用的線程所需內存大小進行調整。梳理業務邏輯,採用合適的算法最重要。編程