【发布时间】:2019-05-21 09:45:42
【问题描述】:
我的任务是使用递归在 Java 中创建二进制搜索。但是,即使我指定了返回值,它仍然告诉我必须返回一个 int 结果。以下是我的代码的相关部分:
我尝试在 if-else 语句之外添加一个 return,结果却收到 StackOverflowError。
result = binarySearch(numbers, 0, numbers.length-1, search);
if(result==-1)
System.out.println("Value not found.");
else
System.out.println(search + " was found at index " + result);
}
public static int binarySearch(int n[], int f, int l, int val) {
if(f>l)
return -1;
else {
int mid = (f+l)/2;
if(val == mid)
return n[mid];
else {
if(val < mid)
binarySearch(n, f, mid-1, val);
if(val > mid)
binarySearch(n, f, mid+1, val);
}
}
}
我期望如下:从用户那里收集一个值 search 并传递给 binarySearch 方法。然后 binarySearch 方法应该从起始值 0 到最终值搜索我的 int 数组 numbers 以找到该值。在 binarySearch 方法中,我相信我的逻辑是正确的。当初始低值大于初始高值时,表示搜索完成,没有找到结果,所以返回-1。否则,该项目在数组中,因此创建一个值 mid 来设置搜索的中间位置。如果正在搜索的值等于中间值,则返回找到它的索引。如果该值小于中间值,则减小高值并再次运行搜索,因为数字必须在中间值的左侧。如果该值大于中间值,则增加它并重新运行,因为它必须向右。我对此的理解是否正确?为什么在 if-else 语句中无法识别返回?
任何帮助将不胜感激。谢谢。
【问题讨论】:
-
在递归情况下,您实际上并没有
returning 任何东西。只有跑步。投票结束,因为您的问题是一个错字。 -
@JoeC 抱歉,但您有没有想过,并非每个人都拥有与您相同的理解水平?对你来说似乎很明显的事情对其他人来说可能并不明显。我不是在寻找答案的讲义,我认为很清楚我想要一个适当的解释,以便我能够理解和改进。我花时间通过我的代码写下我的逻辑思维过程,这样如果我错了,我可以得到纠正。
-
除了缺少
return之外,您还将中间索引与您正在搜索的值而不是中间索引中的值进行比较。
标签: java recursion binary return binary-search