java - 简单的中点递归混淆
问题描述
我正在编写一个简单的中点计算递归:
public static void main(String[] args) {
int[] array = {0, 1, 2, 3, 4, 5, 6};
midPoint(0, array.length - 1, array);
}
private static void midPoint(int start, int end, int[] array) {
int mid = (start + end) >>> 1;
if (start == end) return;
midPoint(start, mid, array);
midPoint(mid + 1, end, array);
}
此代码工作正常,但如果我将最后两行更改为:
midPoint(start, mid - 1, array);
midPoint(mid, end, array);
然后代码进入无限递归并导致堆栈溢出。打印这些值后,我意识到后来,我意识到midPoint(1, -1, array)
进入这种情况,但从概念上讲我不明白,即在编写代码时我如何实现并避免这种情况而无需调试?
解决方案
最终,该方法将以0
start 和1
end 调用。
mid
也会0
如此,但条件(start == end)
将是错误的。
该方法midPoint(0, 0-1, array);
将被调用,并且(start == end)
永远不会是真的,并且该方法将无限次调用自身。
我不明白您的代码点是什么,但也许您应该将其更改为(start >= end)
推荐阅读
- sql - 带有 UNION 子查询的 MAX 不会产生所需的结果
- angular - 如何动态设置组件宿主样式Angular 8
- python - 从 - %(message)s 中删除引号
- reactjs - 如何在反应中修复“未处理的拒绝(TypeError):state.categories.concat 不是函数”?
- javascript - SAPUI5 - 存在异步函数时的路由问题
- machine-learning - 图像识别图像中同心环编码目标的检测
- r - R中只有一个变量的堆积条形图(百分比)?
- c# - 以编程方式将 TextBox 置于编辑模式
- python - 如果任何步骤的测试失败,如何将测试结果发送到 testrail?
- puppet - 在 puppet 中表达数字系列