原理来自百度百科
一、递归的概念
程序调用自身的编程技巧称为递归( 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,根据应用的线程所需内存大小进行调整。梳理业务逻辑,采用合适的算法最重要。