Solved

Recursive Function Problem

Posted on 2011-02-22
5
357 Views
Last Modified: 2012-06-27
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
Comment
Question by:Member_2_4213139
  • 3
  • 2
5 Comments
 
LVL 37

Expert Comment

by:TommySzalapski
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

by:
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

by:Member_2_4213139
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

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

Expert Comment

by:TommySzalapski
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

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

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

IntroductionThis article is the second in a three part article series on the Visual Studio 2008 Debugger.  It provides tips in setting and using breakpoints. If not familiar with this debugger, you can find a basic introduction in the EE article loc…
The greatest common divisor (gcd) of two positive integers is their largest common divisor. Let's consider two numbers 12 and 20. The divisors of 12 are 1, 2, 3, 4, 6, 12 The divisors of 20 are 1, 2, 4, 5, 10 20 The highest number among the c…
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 viewer will be introduced to the technique of using vectors in C++. The video will cover how to define a vector, store values in the vector and retrieve data from the values stored in the vector.

895 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

14 Experts available now in Live!

Get 1:1 Help Now