在C语言中使用递归函数进行二进制搜索

时间:2014-10-02 18:45:09

标签: c search recursion binary

所以我试图编写一个使用递归的二进制搜索函数,如果我超过数组中的两个值,就会不断出现分段错误。我已经看了很多其他代码,正在做我想做的事情,据我所知,他们似乎做了同样的事情。我是一个非常新手的程序员,觉得我用这个把头撞到了墙上。任何帮助将不胜感激。

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;
    }
}
}

2 个答案:

答案 0 :(得分:2)

问题在于:

middleOfArray = sizeArray / 2;

应该是这样的:

middleOfArray = start + sizeArray / 2;

答案 1 :(得分:0)

您也可以像这样获得数组的中间位置。这将为您节省一个额外的变量sizeofArray。

middleofArray=(start+end)/2;