Alfa Hores
Alfa Hores

Reputation: 394

how to make recursive function that find the index of the biggest number in array?

I'm trying to find the index of the biggest number in array, by using a recursive function, but it doesn't work for me.

I wrote this code in "Online C Complier":

#include <stdio.h>
int max(int arr[], int n){
    if (n==0) {
        return 0;
    }
    int temp = max(arr, n-1);
    if (arr[temp] > arr[n]) {
        return temp;
    }
    else {
        return n;
    }
}

int main()
{
    int arr[] = {20,2,44,6,1,15,25,40};
    printf("The index is: %d\n", max(arr, 8));
    return 0;
}

The out put is sometimes 8 which is wrong and sometimes 2 which is correct.

thanks u all!

Upvotes: 3

Views: 326

Answers (1)

Vlad from Moscow
Vlad from Moscow

Reputation: 310980

For starters the first function parameter should have qualifier const because the passed array is not being changed within the function.

This part of the function

int temp = max(arr, n-1);
if (arr[temp] > arr[n]) {
    return temp;
}
else {
    return n;
}

is incorrect. For example n is not a valid index.

The function can look the following way as shown in the demonstration program below.

#include <stdio.h>

size_t max( const int arr[], size_t n )
{
    if ( n > 1 )
    {
        size_t i = max( arr + 1, n - 1 ) + 1;
        return arr[0] < arr[i] ? i : 0;
    }
    else
    {
        return 0;
    }
}    

int main( void )
{
    int arr[] = { 20, 2, 44, 6, 1, 15, 25, 40 };
    const size_t N = sizeof( arr ) / sizeof( *arr );

    printf( "The index is: %zu\n", max( arr, N ) );
}

The program output is

The index is: 2

Or using your approach the function can look like

size_t max( const int arr[], size_t n )
{
    if ( n > 1 )
    {
        size_t i = max( arr, n - 1 );
        return !( arr[i] < arr[n-1] ) ? i : n - 1;
    }
    else
    {
        return 0;
    }
}

Upvotes: 1

Related Questions