【发布时间】:2021-04-08 23:20:23
【问题描述】:
我已经编写了这个基于递归的二进制搜索算法,但我无法理解错误的原因。
// Only a sorted array must be entered for binary search to work
public int binarySearch(int searchFor, int[] inArray, int from, int to){
if (to >= from){
int mid = (to-from)/2 + from;
if (inArray[mid] == searchFor){
return inArray[mid];
} else if (inArray[mid] < searchFor){
binarySearch(searchFor, inArray, ++mid, to);
} else if (inArray[mid] > searchFor){
binarySearch(searchFor, inArray, from, ++mid);
}
}
return -1;
}
线程“主”java.lang.StackOverflowError 中的异常
at search.binarySearch(search.java:24)
at search.binarySearch(search.java:24)
at search.binarySearch(search.java:24)
at search.binarySearch(search.java:24)
【问题讨论】:
-
我认为您需要在
else if调用中添加返回 -
检查此示例与您的代码非常相似。 Example。正如@VedantTerkar 提到的,您在“else if”指令中都错过了 return 这个词。
-
添加输入值以了解问题
-
除了缺少的
returns,当你向左走时,你也会错误地计算上限:你想要mid - 1这里。 (我认为您应该返回索引mid,而不是您已经知道的值inArray[mid]。) -
而且你应该有办法处理找不到元素的事实。
标签: java algorithm recursion search binary-search