在 Java 中,循环(Loop)和递归(Recursion)都可以用来重复执行代码,但它们的实现方式、底层机制、适用场景和性能特点有明显区别。
通过 循环结构 反复执行同一段代码,直到条件不满足为止。
常见形式:
forwhiledo-whilefor (int i = 0; i < 5; i++) {
System.out.println(i);
}
方法自己调用自己,通过不断缩小问题规模来解决复杂问题。
void print(int n) {
if (n == 0) return;
print(n - 1);
System.out.println(n);
}
| 对比维度 | 循环 | 递归 |
|---|---|---|
| 执行方式 | 在同一方法中反复执行 | 方法不断调用自身 |
| 内存占用 | 较小(只有一个栈帧) | 较大(每次调用都新建栈帧) |
| 性能 | 通常更快 | 相对较慢 |
| 代码可读性 | 简单逻辑清晰 | 复杂逻辑更直观 |
| 风险 | 可能死循环 | 可能栈溢出(StackOverflow) |
| 适用问题 | 线性重复任务 | 分治、树、图等问题 |
StackOverflowError// 递归过深会报错
void recursion() {
recursion();
}
int sum = 0;
for (int i = 1; i <= n; i++) {
sum += i;
}
int sum(int n) {
if (n == 1) return 1;
return n + sum(n - 1);
}
✅ 循环更高效
✅ 递归更“数学化”、易理解
很多递归都可以用 循环 + 栈(Stack) 改写,避免栈溢出。
循环是“重复做”,递归是“把问题变小再做”。
如果你愿意,我也可以:
你想深入哪一块?
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。