学习笔记--Java中方法递归调用

Java中方法递归调用

public class RecursionTest01{

    public static void main(String[] args){

        System.out.println("main begin");

        // 调用doSome方法
        doSome();

        System.out.println("main over");
    }

    public static void doSome(){
        System.out.println("main begin");
        doSome(); // 调用方法自身
        System.out.println("main over");
    }
}
  • 在上面的代码中 doSome 的代码片段只有一份
            public static void doSome(){
            System.out.println("main begin");
            doSome(); // 这块代码不结束,下一行代码不执行
            System.out.println("main over");
        }
    
  • 只要调用 doSome 方法就会在栈内存中新分配一块所属内存空间
  • 上述程序会产生一个错误【不是异常,是错误 Error
    • java.lang.*Error
    • 栈内存溢出错误
    • 错误发生无法挽回,只有一个结果,就是 JVM 停止工作

方法递归的使用

  1. 什么是递归?

    方法自身调用自身

     a(){
         a();
     }
    
  2. 递归是很耗费栈内存的,递归算法能不用就尽量不用

  3. 递归必须有结束条件,不然必定会发生栈内存溢出错误

  4. 递归即使有结束条件,但也可能发生栈内存溢出错误,因为递归的太深了

public class RexursionTest{

    public static void main(String[] args){

        int num = 4;

        System.out.println("sum: " + sum(num));

        System.out.println("rexursionSum: " + rexursionSum(num));
        
    }

    // 求 1~N 的和
    public static int sum(int num){

        int result = 0;
        for(int i = 1; i <= num; i++){
            result += i;
        }

        return result;
    }

    // 使用递归,求 1~N 的和
    public static int rexursionSum(int num){

        if (num == 1){
            return 1;
        }
        return num + rexursionSum(num - 1);
    }
}

结果:

sum: 10
rexursionSum: 10

感受递归:

public class RexursionTest{

    public static void main(String[] args){

        int num = 4;

        System.out.println("------------\nsum: " + sum(num));
        
    }

    // 使用递归,求 1~N 的和
    public static int sum(int num){

        System.out.println("sum " + num + " 执行开始");


        int result;

        System.out.println("num: " + num);

        if (num == 1){
            System.out.println("sum " + num + " 执行结束");
            return 1;
        }
        result = sum(num - 1);

        System.out.println("result: " + result);
        result += num;
        System.out.println("result += num: " + result);


        System.out.println("sum " + num + " 执行结束");

        return result;
    }
}

结果:

sum 4 执行开始
num: 4
sum 3 执行开始
num: 3
sum 2 执行开始
num: 2
sum 1 执行开始
num: 1
sum 1 执行结束
result: 1
result += num: 3
sum 2 执行结束
result: 3
result += num: 6
sum 3 执行结束
result: 6
result += num: 10
sum 4 执行结束
------------
sum: 10
上一篇:二叉树的所有路径


下一篇:天翼企业云盘是什么?可以干什么?