所以我试图编写一个使用递归的二进制搜索函数,如果我超过数组中的两个值,就会不断出现分段错误。我已经看了很多其他代码,正在做我想做的事情,据我所知,他们似乎做了同样的事情。我是一个非常新手的程序员,觉得我用这个把头撞到了墙上。任何帮助将不胜感激。
int search(int value, int array[], int start, int end)
{
//Define new variables for use in recursion
int sizeArray, middleOfArray;
//Get size of array
sizeArray = (end - start) + 1;
//Find midpoint of array based off size
middleOfArray = sizeArray / 2;
//Base Case 1, if array unscannable, return -1
if (start > end) {
return -1;
}
//Recursive Cases
else
{
//If midpoint in array is > target value,
//Search from beginning of array->one below midpoint
if (array[middleOfArray] > value){
return search(value, array, start, middleOfArray - 1);
}
//If midpoint in array is < target value,
//search from one above midpoint->end of array
else if (array[middleOfArray] < value) {
return search(value, array, middleOfArray + 1, end);
}
//If none of the other cases are satisfied, value=midpoint
//Return midpoint
else {
return middleOfArray;
}
}
}
答案 0 :(得分:2)
问题在于:
middleOfArray = sizeArray / 2;
应该是这样的:
middleOfArray = start + sizeArray / 2;
答案 1 :(得分:0)
您也可以像这样获得数组的中间位置。这将为您节省一个额外的变量sizeofArray。
middleofArray=(start+end)/2;