java 递归方法

1.什么是递归?

方法自己调用自己

2.当递归时程序没有结束条件,一定会发生:

栈内存溢出错误:Stack Over flowError,所以递归必须要有结束条件

3.递归假设是有结束条件的,就不会发生栈内存溢出吗?

假设结束条件是对的,是合法的,递归也会出现内存溢出,当递归太深的话,导致栈内存不够,因为一直压栈。

4.在实际的开发中,不建议轻易选择递归,能用for循环while循环代替的,尽量代替。因为循环效率高,耗费内存少。递归耗费的内存比较大,另外递归使用不当,会导致jvm死掉。但在极少数的情况下,不用递归这个程序没法实现。

5.在实际开发中,假设真正的遇到了递归,怎么解决?

首先第一步:

  先检查递归的结束条件对不对,如果递归条件不对,必须对条件进一步修改,知道正确为止

第二步:

  假设递归条件没有问题,这是时候需要手动调整JVM的栈内存初始化大小,可以将占内存空间调大点。

  如果运行时还是出现这个错误,只能继续扩大栈的大小。

public class Digui {
    public static void main(String[] args) {
        System.out.println(num(10));
        System.out.println(doSome(3));
    }

    //计算从1+2+3+4+。。。。n的和
    public static int doSome(int n){
        //首先我传入的3,那么下一次传的时候肯定是2,通过n-1来的所以下次调用是doSome(n-1)
        //最后一个是1,那么直接判停条件是1就可以
        if(n==1){
            return 1; //这是第一次出栈
        }
        return  n+doSome(n-1);

    }

    //不用递归算数
    public static int num(int n){
        int sum = 0;
        for (int i = 0;i<=n;i++){
            sum = sum + i;
        }
        return sum;
    }

 递归栈内存流程:

原文地址:https://www.cnblogs.com/peiminer/p/13595442.html