今天来说一下递归,什么是递归?
其实说白了递归就是一个方法自己调用自己,这就是递归,那么递归怎么使用的,他又有什么优点呢?
递归可以说没有什么优点,要说有把勉强算有一个吧,代码简洁,其他的我还真没想出来递归有什么优点,但是递归的缺点到是不少,执行速度慢,占内存,可以说是效率低下,但是为什么还要用递归的,其实有时递归还是有些用处的。
递归一个不断循环调自方式,递归可以做的事,循环都可以做,递归不可以做的事,循环也能做。
下面给出一个递归学习的经典案例,使用递归计算阶乘。
代码如下:
public class Test {
// 使用递归计算阶乘
// 定义一个方法
public static int recursion(int n){
//如果n==1那么直接返回1,,否则就再次调用自己
if(n==1){
return 1;
}else{
return n*recursion(n-1);// 每调用一次n就减1
}
}
public static void main(String[] args) {
int a=recursion(5);//把返回结果赋值给a
System.out.println(a);// 打印结果
}
}
我们来分析一下原理:
首先我们通过了main方法传入了一个值5,5到方法里面就是n。这是第一次调用,然后5!=n我们走到了else里执行了n*recursion(n-1);在此我们又进行了一次调用,这是第二次,因为减1,所以n=4,4!=1继续调用n*recursion(n-1);这又是一次调用,以此类推当n==1时返回1,因为需要返回值,所以前面的方法还在等着,这时返回1,那么上一次调用就是2*1,然后把2*1的值有返回,变成3*2继续返回4*6,在继续返回5*24,所以最终的结果是120
看图: