递归调用:通过调用或间接调用程序自身
递归调用最重要的一点是,一定要有个头,要是没有头,一直调用下去,就成了死循环了.
代码示例:
/** * 递归调用代码示例<br> * 说明:一个方法,自己直接或间接的调用自己.<br> * @author 冲出地球 * */ public class Recursion { /** * 示例程序:阶乘<br> * 一个数的阶乘,就是从1一直乘到那个数<br> * 示例:2! = 1*2 5! = 1*2*3*4*5<br> * 分解:5! = 5*4! = 5*4*3! = 5*4*3*2! = 5*4*3*2*1<br> * @return 返回i和i-1的阶乘的乘积,也就是i*(i-1)! * */ private static int getFactorial(int i){ if (i == 1) { return 1; } else { return i*getFactorial(i-1); } } /** * 示例程序:累加<br> * 随便指定一个数,求从1累加到这个数的和<br> * 示例: 5的累加= 5+4+3+2+1<br> * 分解: 5的累加= 5+4的累加 = 5+4+3的累加 = ... = 5+4+3+2+1<br> * @author 冲出地球 * @param i 累加到的那个数 * @see Recursion#getSumByCirculation(int) 累加的for循环方法 * */ private static int getSumByRecursion(int i){ if (i == 1) { return 1; } else { return i + getSumByRecursion(i-1); } } /** * 累加的for循环方法<br> * @author 冲出地球 * @param i 累加到的那个数 * @see Recursion#getSumByRecursion(int) 累加的递归调用方法 * */ private static int getSumByCirculation(int i){ int result = 0; for (int j = 1; j <= i ;j++){ result += j; } return result; } /** * 主程序入口 * */ public static void main(String[] args) { //求5的阶乘 int factorial5 = getFactorial(5); System.out.println("5的阶乘是:" + factorial5); //利用for循环获取100的累加 int sumByCirculation100 = getSumByCirculation(100); System.out.println("利用for循环计算出的100的累加的值是:"+sumByCirculation100); //利用递归调用获取100的累加 int sumByRecursion100 = getSumByRecursion(100); System.out.println("利用递归调用计算出的100的累加的值是:"+sumByRecursion100); } }