在 java 中,优先使用 while 循环处理迭代逻辑,仅在需要回溯或树形结构遍历时使用递归。选择的关键在于判断问题是否天然具有自相似性:如果是线性累加、计数或状态更新,用 while;如果是分治、目录遍历或数学递推,用递归。注意递归有栈溢出风险,而 while 没有。

while 循环适合哪些场景
while 循环适用于所有需要重复执行代码块且条件明确的场景,特别是线性数据处理和状态机。它通过显式控制变量来终止循环,内存占用恒定,不会导致栈溢出。对于简单的计数、读取输入或轮询资源,while 是最安全且高效的选择。

public class WhileExample {
public static void main(String[] args) {
int count = 0;
while (count < 5) {
System.out.println("Count: " + count);
count++;
}
}
}
预期输出:
Count: 0
Count: 1
Count: 2
Count: 3
Count: 4
立即学习“Java免费学习笔记(深入)”;
递归适合哪些场景
递归适用于具有自相似子结构的问题,如二叉树遍历、阶乘计算或文件目录递归查找。它将大问题分解为小问题,代码更简洁直观。但每次调用都会压栈,深度过大时易引发 StackOverflowError。建议在深度可控或 JVM 栈空间充足时使用。

public class RecursiveExample {
public static long factorial(int n) {
if (n == 0) return 1;
return n * factorial(n - 1);
}
public static void main(String[] args) {
System.out.println(factorial(5));
}
}
预期输出:
120
递归深度超过 10000 时会发生什么
当递归深度超过 JVM 默认栈容量(通常约 10000 层)时,会抛出 StackOverflowError。这是由操作系统分配的线程栈大小限制决定的,而非 Java 语言本身。此时程序无法继续执行,必须改为迭代或使用尾递归优化(Java 不支持自动尾递归优化)。


















