递归的定义
方法直接的或者间接的调用方法自身的过程,称为递归。
什么样的需求可以使用递归调用?
1:一个需求可以被分解为若干个子需求。
2:子需求的解决的方案和原需求的解决方案一致。
3:原需求的解决依赖于子需求的解决。
实现递归的代码
方法1:
//求n的阶乘的方法
public static int fac(int n){
int result = 0;
if(n == 1){
result = 1;
}else{
result = n*fac(n-1);
}
return result;
}
方法2:
//求n 的阶乘
public static int fac1(int n){
int mul = 1;
for(int i = n;i>0;i--){
mul *= i;
}
return mul;
}
递归阶乘的底层堆栈调用
一张图,你能明白
递归阶乘的底层堆栈
递归的优缺点
优点:代码简单,思路也还行。
缺点:比较消耗栈内存。稍有不慎,有可能导致栈内存溢出。 stackoverflowError一种内存溢出的异常。
斐波那契数列
见《学编程,你必须掌握的几种算法编程》