概述
- 递归:指在当前方法内调用自己的这种现象
- 递归的分类:
- 递归分为两种,直接递归和间接递归
- 直接递归称为方法自身调用自己
- 间接递归可以A方法调用B方法,B方法调用C方法,C方法调用A方法。
- 注意事项:
- 递归一定要有条件限定,保证递归能够停止下来,否则会发生栈内存溢出。
- 在递归中虽然有限定条件,但是递归次数不能太多。否则也会发生栈内存溢出。
- 构造方法,禁止递归
public class Demo01Recursion {
public static void main(String[] args) {
a();
}
/*递归一定要有条件限定,保证递归能够停止下来,否则会发生栈内存溢出。
* Exception in thread "main" java.lang.StackOverflowError*/
private static void a() {
System.out.println("a方法");
a();
}
}

/*在递归中虽然有限定条件,但是递归次数不能太多。否则也会发生栈内存溢出。
* Exception in thread "main" java.lang.StackOverflowError*/
private static void b(int i) {
System.out.println(i);
if (i == 20000) {
return;
}
b(++i);
}
/*构造方法,禁止递归
* 编译报错:构造方法是创建对象使用的,一直递归会导致内存中有无数多个对象,直接编译报错*/
public Demo01Recursion() {
// Demo01Recursion();
}
递归累加求和
计算1~n的和
分析:num的累和 = num + (num - 1)的累和,所以可以把累和的操作定义成一个方法,递归调用。
代码实现:
// 使用递归计算1-n之间的和
public class Demo02Calculation {
public static void main(String[] args) {
System.out.println(calculation(10));
}
/*定义一个方法,使用递归计算1-n之间的和
* 1+2+3+...+n 反过来也就是 n+(n-1)+(n_2)+...+1
* 已知:
* 最大值n
* 最小值1
* 使用递归必须明确:
* 1、递归的结束条件:获取到1的时候
* 2、递归的目的:获取下一个被加的数字(n-1)*/
private static int calculation(int n) {
// 获取到1的时候
if (n == 1) {
return 1;
}
// 获取下一个被加的数字
return n + calculation(n - 1);
}
}
递归计算阶乘
/**
* 使用递归计算阶乘
*/
private static int factorial(int i) {
if (i == 1) {
return 1;
} else if (i < 0) {
return 0;
}
return i * factorial(i - 1);
}
网友评论