这是我的二分搜索逻辑,当我尝试运行它时,它给出了 我的 stackoverflow 错误....我也写了基本条件。其具体错误点在哪里。 对于此代码,我采用了具有预定义值的全局数组,并初始给出startingIndex=0 和lastIndex=intArray.length-1;
public static void binarySearchInteger(int searchingElement,int
startingIndex,int lastIndex) {
middleIndex=(startingIndex+lastIndex)/2;
if(searchingElement==intArray[middleIndex])
System.out.println("Found the Element");
else if(startingIndex==lastIndex&&
searchingElement!=intArray[middleIndex])
System.out.println("There is no such Element");
else {
if(intArray[middleIndex]>searchingElement)
binarySearchInteger(searchingElement,
startingIndex,middleIndex);
else
binarySearchInteger(searchingElement,middleIndex,lastIndex);
}
}
最佳答案
假设 startIndex == 0
和 endIndex == 1
,则 middleIndex
设置为 1/2 == 0
(整数除法)。现在startIndex == middleIndex
,因此您的最后一次递归调用将调用具有完全相同参数值的方法并导致无限递归,从而导致堆栈溢出。
由于您已经在与中间元素进行比较,因此不需要在递归搜索中包含中间元素,因此将最后一个递归调用替换为:
binarySearchInteger(searchingElement,middleIndex + 1,lastIndex);
您的代码中可能还有更多错误,但我仅通过查看就发现了这个错误。您可以通过使用调试器并单步执行代码来自行查找错误,准确查看发生的情况。
关于java - 为什么这个递归函数会抛出 StackOverFlow 错误???这是我的二分搜索逻辑,其中的确切错误点在哪里,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45996856/