操作系統會給每個進程分配一個最大上限的堆棧空間,如果超過了這個記憶體空間大小程式就會coredump ...
原理來自百度百科
一、遞歸的概念
程式調用自身的編程技巧稱為遞歸( 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,根據應用的線程所需記憶體大小進行調整。梳理業務邏輯,採用合適的演算法最重要。