简短结论:break 不能直接中断 Java 的递归调用,而且有使用限制。
break 的作用范围在 Java 中:
break 只能用于:
switch 语句for、while、do-while)例如下面这是错误的:
void recursion(int n) {
if (n == 0) {
break; // 编译错误
}
recursion(n - 1);
}
递归的“中断”本质上是让方法返回,通常用 return。
returnvoid recursion(int n) {
if (n == 0) {
return; // 结束当前递归层
}
recursion(n - 1);
}
如果是带返回值的递归:
int sum(int n) {
if (n == 0) {
return 0;
}
return n + sum(n - 1);
}
Java 没有像 break 那样直接打断整个调用栈的机制,常见做法有:
boolean search(TreeNode node, int target) {
if (node == null) return false;
if (node.val == target) return true;
if (search(node.left, target)) return true;
if (search(node.right, target)) return true;
return false;
}
void recursion(int n) {
if (n == 0) throw new RuntimeException("stop");
recursion(n - 1);
}
void dfs(Node node, boolean[] found) {
if (found[0]) return;
if (node.val == target) {
found[0] = true;
return;
}
dfs(node.left, found);
dfs(node.right, found);
}
break 不能中断递归return 退出单层递归如果你有具体递归代码,我可以帮你改成“可中断”的版本。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。