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(10)); } //计算从1+2+3+4+。。。。n的和 public static int doSome(int n){ //首先我传入的10,那么下一次传的时候肯定是9,通过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