【发布时间】:2019-03-21 04:51:04
【问题描述】:
我正在尝试使用 Java 中的递归创建二进制搜索算法,在调试时一切似乎都很好,直到它找到值并应该返回所需键的索引。但是,由于某种原因,它会跳过 return 语句并转到底部的 return 语句。
public int binSearch(int key, int L, int R) {
int mid =(R + L)/2;
if (R < L) {
return -1;
}
if (A[mid] == key) {
return mid;
}
if (key > A[mid]) {
binSearch(key, mid + 1, R);
}
if (key < A[mid]) {
binSearch(key, L, mid - 1);
}
return -1;
}
【问题讨论】:
-
想一想当您对
binSearch(key, L, mid - 1);的调用从递归返回时会发生什么。而不是使用该函数调用返回的内容,而是在底部返回-1。因此,您可能应该为每次通话说return binSearch(...)。此外,您的 if 语句已经检查了将key与A[mid]进行比较的所有情况。检查这些比较时,您可能会受益于使用if else和else条件。 -
您缺少退货声明。试试这种方式return binSearch()