Java 递归详解:原理、阶乘示例与优劣势权衡
Java 递归
本指南讲解 Java 递归方法原理,通过经典阶乘示例演示,并评估递归的优缺点。
在 Java 中,调用自身的方法称为递归方法,该技术称为递归。一个直观的现实类比是两面镜子相对:每个倒影都是另一个镜像,不断重复直到光线被吸收。
递归如何工作

上图中,recurse() 方法从 main() 被调用 —— 这是普通调用。在 recurse() 内部,同一方法再次调用自身,形成递归调用。为防止无限循环,每次递归调用必须包含终止条件,通常用 if…else 实现。
示例:递归计算阶乘
class Factorial { static int factorial(int n) { if (n != 0) // 终止条件 return n * factorial(n - 1); // 递归调用 else return 1; } public static void main(String[] args) { int number = 4, result; result = factorial(number); System.out.println(number + " factorial = " + result); } }
输出:
4 factorial = 24
factorial() 从 main() 接收参数 number。方法内
return n * factorial(n-1); 导致方法以递减值再次调用自身。从 n = 4 开始,调用链:4 → 3 → 2 → 1 → 0。当 n 为 0 时,if 条件失败,返回 1。累乘结果随后沿调用栈回传至 main()。
阶乘程序执行过程图解
下图展示执行期间调用栈的演变。

递归的优缺点
- 优点: 简化天然适合递归模式的问题(如树遍历、组合生成),代码更短、可读性更强。
- 缺点: 每次递归调用消耗栈空间;深度递归可能导致栈溢出。递归方案通常比迭代方案内存效率低、运行较慢。
总体而言,递归以更高内存占用和潜在性能开销换取优雅解法。对于深度有限的场景,这种权衡往往值得。
推荐阅读:递归的优缺点有哪些?
java
- C 语言递归编程精要:最佳实践与退出条件设计
- 精通 Java 运算符:类型、语法与实战示例
- 精通 Java 接口:概念、实现与最佳实践
- 精通 Java Try-With-Resources:自动资源管理详解
- Java 注解详解:类型、放置位置与实战示例
- Java 注解类型完全指南:预定义、自定义与元注解
- Java String length() 方法:获取字符串长度(示例)
- Java String.charAt() 详解:语法、返回类型、异常与实战示例
- 精通 Java String.endsWith():检查字符串后缀(示例)
- Java 字符串替换大全:replace()、replaceAll() 与 replaceFirst() 详解
- Java 递归反转字符串:原理、代码实现与性能分析
- Java 方法重写详解:规则、多态调用与 super 协作