一、前言
我们在日常开发中可能会遇到自己调用自己的情况,就是自身包含了自己。一个方法在执行过程中调用自身,就称为递归。递归相当于数学上的数学归纳法,有一个起始条件,然后有一个递推公式。
二、递归示例
错误示例:
package day07;
/**
* @author qx
* @date 2024/3/6
* @des
*/
public class Demo {
public static void main(String[] args) {
show();
}
public static void show() {
// 调用自身
show();
}
}
执行程序:
这样使用递归会抛出一个栈溢出错误的异常,说明我们使用递归还需要有一个结束的条件,不然递归就会一直执行下去,抛出栈溢出的异常。
递归求 N 的阶乘:
package day07;
/**
* @author qx
* @date 2024/3/6
* @des
*/
public class Demo {
public static void main(String[] args) {
int factor = factor(5);
// 5*4*3*2*1
System.out.println(factor);
}
public static int factor(int n) {
// 结束条件
if (n == 1) {
return 1;
}
return n * factor(n - 1);
}
}
执行结果:
递归执行过程分析:
要想理解清楚递归, 必须先理解清楚 “方法的执行过程”, 尤其是 "方法执行结束之后, 回到调用位置继续往下执行,并在特定的位置有一个退出的条件。