程序员

递归

2020-07-01  本文已影响0人  是归人不是过客

关于方法的递归调用
1、方法自身调用自身
2、有结束条件
该程序执行过程种只有压栈动作,没有任何出栈动作,最终会导致内存溢出错误 StackOverflowError,如下

public class p {
    public static void main(String [] args) {
        m1();
    }
    public static void m1() {
        m1();
    }

举个例子:计算1到5的和
1、利用非递归

public class p {
    public static void main(String [] args) {
        int n = 5;
        int result = method1(n);
    }
    private static int method1(int n) {
        int sum = 0;
        for(int i = 1; i <= n;i++) {
            sum += i;
        }
        return sum;
    }
}

2、利用递归

public class p {
    public static void main(String [] args) {
        int n = 5;
        int result = method1(n);
    }
    private static int method1(int n) {
        if(n == 1) {
            return 1;
        }else {
            return n + method1(n - 1);
        }
        
    }
}

java虚拟机下的栈中递归的工作流程:(如下图)


JVM.png

函数的工作流程如下图:


method.png
上一篇 下一篇

猜你喜欢

热点阅读