原理来自百度百科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,根据应用的线程所需内存大小进行调整。梳理业务逻辑,采用合适的算法最重要。编程