syyc8A3QierDK4G
syyc8A3QierDK4G

Reputation: 15

Binary Search Using Recursive Function in C

So I'm trying to write a binary search function that uses recursion and keep getting a segmentation fault if I go past two values in the array. I've looked at a bunch of other code doing what I'm trying to do and as far as I can see they appear to do the same thing. I'm a very novice programmer and feel like I'm banging my head against the wall with this. Any help would be appreciated.

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

Upvotes: 0

Views: 164

Answers (2)

Gaurav Parek
Gaurav Parek

Reputation: 327

You can also get middle of array like this. Which will save you from one extra variable sizeofArray.

middleofArray=(start+end)/2;

Upvotes: 0

mostafaTmj
mostafaTmj

Reputation: 383

The problem is here:

middleOfArray = sizeArray / 2;

It should be like this:

middleOfArray = start + sizeArray / 2;

Upvotes: 2

Related Questions