Hello, I am a student and I have a problem, I need to rewrite this code so that the function is recursive, but I have no idea where to start, the function is so basic that, to me, the function is fine, here is the code:

#include <iostream>

using std::cin;

using std::cout;

using std::endl;

int linearSearch ( const int [], int, int );

int main ()

{

const int arraySize = 100;

int a [arraySize];

int searchKey;

for ( int i = 0; i < arraySize; i++ )

a[i] = 2 * i;

cout << "Enter integer search key: ";

cin >> searchKey;

int element = linearSearch (a, searchKey, arraySize );

if ( element != -1 )

cout << "Found value in element " << element << endl;

else

cout << "Value not found" << endl;

return 0;

}

int linearSearch ( const int array[], int key, int sizeOfArray )

{

for ( int j = 0; j < sizeOfArray; j++ )

if ( array[j] == key )

return j;

return -1;

}

can any one give me any hints??

#include <iostream>

using std::cin;

using std::cout;

using std::endl;

int linearSearch ( const int [], int, int );

int main ()

{

const int arraySize = 100;

int a [arraySize];

int searchKey;

for ( int i = 0; i < arraySize; i++ )

a[i] = 2 * i;

cout << "Enter integer search key: ";

cin >> searchKey;

int element = linearSearch (a, searchKey, arraySize );

if ( element != -1 )

cout << "Found value in element " << element << endl;

else

cout << "Value not found" << endl;

return 0;

}

int linearSearch ( const int array[], int key, int sizeOfArray )

{

for ( int j = 0; j < sizeOfArray; j++ )

if ( array[j] == key )

return j;

return -1;

}

can any one give me any hints??

Experts Exchange Solution brought to you by

Enjoy your complimentary solution view.

Get every solution instantly with Premium.
Start your 7-day free trial.

I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

A recursive function is one that contains calls to itself.

Our textbook (Weiss, Data Structures & Problem Solving in C++) defines four "fundamental rules" for recursion:

1. Base Cases: Always have at least one case that can be solved without using recursion.

2. Make Progress: Any recursive call must progress toward the base case.

3. "You gotta believe": Always assume that the recursive call works.

4. Compound interest rule: Never duplicate work by solving the same instance of a problem in separate recursive calls.

For your particular problem, linearSearch will call itself until it finds an element of the array that matches the key, or the whole array has been searched. These will be your base cases.

Clearly, if linearSearch calls itself again & again with exactly the same values, it will never arrive at a solution or terminate. Therefore, it is essential to write the recursive call so that the problem is getting smaller & smaller with each call. A great canidate for this requirement is the parameter sizeOfArray. Imagine a version of the function linearSearch that contains the following line:

return linearSearch(array, key, (sizeOfArray - 1);

I hope this helps,

- Ken

And yet it betrayed me so many times :D j/k

1 - simple case which the solution can calculated direct

2 - Other case which can simplefy to way to be the simble case

for example the factorial function n! = n*(n-1)*(n-2)*....*1

can divided into 2 case

0! = 1

n! = n * (n-1)!

so the function will be

int fact (int n)

{

if (n==0) //the simple case

return 1;

else

return n* fact(n-1); // the other case should simplify from n! -> (n-1)!

}

so your linear search should be the same try to find a simple case that you can determin the result and other case sholud be simple than the orginal case

try and let we know

{

if (key == array[sizeOfArray-1])

return (sizeOfArray-1);

else if ((sizeOfArray-1) >= 0)

return linearSearch(array, key, (sizeOfArray - 1));

else return -1;

}

hope it help

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
C++

From novice to tech pro — start learning today.

Experts Exchange Solution brought to you by

Enjoy your complimentary solution view.

Get every solution instantly with Premium.
Start your 7-day free trial.

Ring any bells?