[英]Why this recursive function is throwing StackOverFlow error???this is my logic for binary search and Where is the exact point of error in it
這是我執行二進制搜索的邏輯,當我嘗試運行它時,它給了我stackoverflow錯誤。...我也寫了基本條件。 錯誤的確切位置在哪里。 對於此代碼,我采用了具有預定義值的全局數組,並給出了初始的startIndex = 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
,因此您的最后一個遞歸調用將使參數值完全相同的方法產生無限遞歸,這將導致堆棧溢出。
由於您已經在與Middle元素進行比較,因此您無需在遞歸搜索中包括Middle元素,因此將上一個遞歸調用替換為:
binarySearchInteger(searchingElement,middleIndex + 1,lastIndex);
您的代碼中可能存在更多錯誤,但是僅通過查看它就發現了這一錯誤。 您可以使用調試器並逐步檢查代碼,准確查看會發生什么,從而自己發現錯誤。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.