今天我们就来说说递归 白话讲:就是自己调用自己
递归:指在当前方法内调用自己的这种现象
递归的分类
递归分为两类,直接递归和间接递归
直接递归称为方法自身调用自己
间接递归可以A方法调用B方法,B方法调用C方法,C方法调用A方法
递归的注意事项
递归一定要有条件限定,保证递归能够停止下来,否则会发生内存溢出
在递归中虽然有限定条件,但是递归次数不能太多,否则也会发生栈内存溢出
构造方法禁止递归,为何了:因为构造方法是创建对象使用的,总不能让对象一直创建下去把。
代码演示递归
public class Demo7 {
public static void main(String[] args) {
digui(1);
}
//定义一个静态方法
private static void digui(int i){
System.out.println(i);
digui(++i);
}
}
//结果如下图所示
我们加个条件试试
public class Demo7 {
public static void main(String[] args) {
digui(1);
}
//定义一个静态方法
private static void digui(int i){
System.out.println(i);
//我们来添加一个递归结束的限定条件
if(i == 5000){
return;//结束方法
}
digui(++i);
}
}
这样就不会出现栈内存 溢出了
我们来做个Demo
我们来计算1到10的和
采用递归:代码如下
分析:num的累和=num+(num-1)的总和,所以可以把累和的操作定义成一个方法,递归调用。
public class DiguiSumDemo {
public static void main(String[] args) {
//计算1到num的和,使用递归完成
int num = 10;
//调用求和的服务
int sum = getSum(num);
System.out.println(sum);
}
/**
* 通过递归算法实现
* @return
*/
private static int getSum(int num) {
/*
num为1时,方法返回1,相当于是方法的出口,num总有是1的情况
*/
if(num == 1){
return 1;
}
/*num不为1时,方法返回 num +(num‐1)的累和 递归调用getSum方法 */
return num + getSum(num - 1);
}
}
//打印得到
55