# Recursive Function Problem

The function binarySearch used to be iterative, and now I'm trying to make it recursive.  However, for some reason, I get an error when I try to pass the 2nd parameter... can anyone give me a hint as to what I'm doing wrong?

Code:

#include <iostream>

using namespace std;

int binarySearch(int, int *, int);

int main()
{
int myList[10] = {1,7,13,17,24,38,45,50,100,1000};

int num;
int loc;
int i;

cout << "The list you entered is: " << endl;
for (i=0; i < sizeof(myList)/sizeof(int); i++)
cout << myList << " ";
cout << endl;

cout << "Enter search item: ";
cin >> num;
cout << endl;

binarySearch(num, myList, sizeof(myList)/sizeof(int));
loc = binarySearch(num, myList, sizeof(myList)/sizeof(int));

if (loc != -1)
cout << "Item found at position " << loc << endl;
else
cout << "Item not in the list" << endl;

system("pause");
return 0;
}

int binarySearch(int item, int *list, int length)
{
int first = 0;
int last = length - 1;
int mid;

if (first <= last)
{
mid = (first + last) / 2;

if (list[mid] == item)
return mid;
else if(list[mid] > item)
return binarySearch(item, first, mid - 1);
else
return binarySearch(item, mid + 1, last);
}
else
return -1;
}
###### Who is Participating?

Commented:
Your problem is that you didn't change the function definition but tried to send it more items. You were sending an int where it was expecting a int* (array of ints)
0

Commented:
Try it like this
int binarySearch(int item, int *list, int last, int start = 0)
For the first call, send length -1 as last and leave start blank.
0

Author Commented:
OK, I changed the function to:

int binarySearch(int item, int *list, int last, int start = 0)

but it didn't like that...  so I put it back to:

int binarySearch(int item, int *list, int length, int start = 0)

and:

"none of the 2 overloads could convert all the argument types"

As for sending it an int when it was expecting an int*, where does that occur?  I mean, I would send it an int* if I could!!!
0

Author Commented:
This didn't solve the entire problem, but it needed to be corrected...
0

Commented:
int* is an array. You had it set up to take an array as the second argument but in some places you were sending first or last there. You just needed to set up the function to take the right things in the right order. What else do you need? Why did you give a B? I will still help until everything is fixed.
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.