Solved

# Recursive Function Problem

Posted on 2011-02-22
358 Views
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;
}
0
Question by:Member_2_4213139
• 3
• 2

LVL 37

Expert Comment

ID: 34956451
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

LVL 37

Accepted Solution

TommySzalapski earned 500 total points
ID: 34956462
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

Author Comment

ID: 34956515
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 Closing Comment

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

LVL 37

Expert Comment

ID: 34956762
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

## Featured Post

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

### Suggested Solutions

Container Orchestration platforms empower organizations to scale their apps at an exceptional rate. This is the reason numerous innovation-driven companies are moving apps to an appropriated datacenter wide platform that empowers them to scale at a …
Basic understanding on "OO- Object Orientation" is needed for designing a logical solution to solve a problem. Basic OOAD is a prerequisite for a coder to ensure that they follow the basic design of OO. This would help developers to understand the b…
The goal of the video will be to teach the user the concept of local variables and scope. An example of a locally defined variable will be given as well as an explanation of what scope is in C++. The local variable and concept of scope will be relat…
The goal of the video will be to teach the user the difference and consequence of passing data by value vs passing data by reference in C++. An example of passing data by value as well as an example of passing data by reference will be be given. Bot…