[英]Segmentation fault in recursive Binary Search Algorithm in C
這是一個具有遞歸二進制搜索算法的C程序,但是當我運行它時,調試器說二進制搜索功能中存在訪問分段錯誤。 為什么會這樣,我該如何解決?
這是遞歸二進制搜索功能:
int binSearch(int val, int numbers[], int low, int high)
{
int mid;
mid=(low+high)/2;
if(val==numbers[mid])
{
return(mid);
}
else if(val<numbers[mid])
{
return(binSearch(val, numbers, low, mid-1));
}
else if(val>numbers[mid])
{
return(binSearch(val, numbers, mid+1, high));
}
else if(low==high)
{
return(-1);
}
}
謝謝 :)
您必須在val < ...
和val > ...
之前檢查low == high
,因為否則high
可能變得小於low
,因此您的下一個遞歸可能會計算出無效的mid
您的極端情況不對:特別是,當您的low
和high
指數通過時,您會在達到low == high
測試之前繼續遞歸調用。 重新安排測試:
int binSearch(int val, int numbers[], int low, int high) {
int mid = (low + high) / 2;
if (val == numbers[mid]) return mid;
if (val < numbers[mid]) {
if (mid > low) return binSearch(val, numbers, low, mid-1);
} else if (val > numbers[mid]) {
if (mid < high) return binSearch(val, numbers, mid+1, high);
}
return -1;
}
嘗試這個:
修復代碼中的構造
int binSearch(int val, int numbers[], int low, int high)
{
int mid;
mid=(low+high)/2;
if(low<=high)
{
if(val==numbers[mid])
return mid;
else if(val<numbers[mid])
return binSearch(val, numbers, low, mid-1);
else
return binSearch(val, numbers, mid+1, high);
}
else
return -1;
}
low
< high
不確定。 如果不是這種情況,您將要搜索數組邊界之外的內容。
為此添加完整性檢查。
if (low < high)
return -1;
編輯:正如其他指出的那樣,您還可以在開始時檢查低==高,但是不能確保函數的第一次調用具有聲音值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.