方法递归

/*
    关于方法的递归调用
        1、递归:方法自身调用自身
        2、递归很耗费栈内存,递归算法可以不用的时候尽量别用
        3、递归必须有结束条件,
            没有结束条件必定会发生栈内存溢出错误
            (即使有结束条件也可以会)
*/
public class RecursionTest01
{
    //主方法
    public static void main(String[] args){
        
        System.out.println("main begin");

        //调用dosome方法
        dosome();
    }

    //以下的代码片段虽然只有一份,
    //但是可以被重复的调用,
    //并且只要调用dosome方法就会在栈内存中分配一块所属的空间
    public static void dosome("dosome begin"){
        System.out.println("dosome begin");
        dosome(); //这行代码不结束下一行程序不能执行
        System.out.println("dosome over");
    }

}
/*
    不使用递归,计算1~n的和
*/
public class RecursionTest02
{
    public static void main(String[] args){
        /*
        int sum = 0;
        for(int n = 1;n<=10;n++){
            sum += n;
        }
        System.out.println(sum);
        */
        int n = 4;
        int retValue = sum(n);
        System.out.println(retValue);
    }

    //单独的定义一个方法,独立的可以完成计算1~n的求和
    public static int sum(int n){
        int result = 0;
        for(int i=1;i<=n;i++){
            result += i;
        }
        return result;
    }
}
/*
    使用递归计算1~n的求和
*/
public class RecursionTest03
{
    public static void main(String[] args){
        
        //1~4的和
        int n = 4;
        int retValue = sum(n);
        System.out.println(retValue);
    }

    public static int sum(int n){
        //4 + 3 + 2 + 1
        if(n == 1){
            return 1;
        }
        return n + sum(n-1);
    }
}
public class RecursionTest04
{
    public static void main(String[] args){
        
        int n = 5;
        int retValue = method(n);
        System.out.println(retValue);
        
    }

    public static int method(int n){
        int result = 1;
        for(int i = n; i > 0; i--){
            result *= i;
        }
        return result;

        /*
        递归方式:
        if(n == 1){
            return 1;
        }
        return n * method(n - 1);
        */
    }
}

 

posted @ 2020-08-10 23:49  Lerresino  阅读(345)  评论(0)    收藏  举报