[java基础]递归调用

递归调用:通过调用或间接调用程序自身

递归调用最重要的一点是,一定要有个头,要是没有头,一直调用下去,就成了死循环了.

代码示例:

 

/**
 * 递归调用代码示例<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);
    }
    
}

 

posted @ 2017-03-29 21:55  郑小辉  阅读(813)  评论(0编辑  收藏