javaSE-递归Recursion

定义:方法自己调用自己

1、在实际的开发中,不建议轻易的选择递归,能用for循环while循环代替的,尽量使用循环来做。因为循环的效率高,耗费的内存少。递归耗费的内存比较大,另外递归的使用不当,会导致JVM死掉。(在少数的情况下,不用递归,这个程序没法实现。)递归我们还是要认真学习的。

2、在实际的开发中,的遇到了:StackOverflowError你怎么解决这个问题,可以谈一下你的思路吗?我来谈一下我的个人思路:

  •  首先:先检查递归的结束条件对不对。如果递归结束条件不对, 必须对条件进一步修改,直到正确为止。
  • 第二步:假设递归条件没问题,怎么办?
  •                     这个时候需要手动的调整JVM的栈内存初始化大小。 可以将栈内存的空间调大点。(可以调整大一些。)
  •                 
  • 第三步:调整了大小,如果运行时还是出现这个错误, 没办法,只能继续扩大栈的内存大小。
  •  (java -X)这个可以查看调整堆栈大小的参数

 

递归实例:

//需求:使用递归,计算5的阶乘,一定要给递归的出口地址 public class RecursionDemo{     public static void main ( String[] args ) {         int b =5;         System.out.println();      }     public static int recursion(int a ){         //一定要给一个出口;不然会出现死循环;         if(a ==1){             return 1;         }         //方法自己调用自己;         return a*recursion(a-1);     } } 

//需求:计算5的阶乘(不使用递归) public calss Demo(){ int a = 5; int ret= 1; for(int i =0;i<5;i++){ ret*=a--; } System.out.println(ret); }