RecursionFinding Minimum, Maximum Element from an Array using Recursion

Finding Minimum, Maximum Element from an Array using Recursion

10 mins read Easy Updated 11 महीने पहले
Recursion

Problem Statement

Given an array of integers arr, find the minimum and maximum element of this array using recursion.

Examples

Example 1:

Input: arr = {1, 4, 3, -5, 7, 5}

Output: min = -5, max = 7

Different Recursive Approaches

Approach 1:

Code Implementation in C++:

#include <iostream> 
using namespace std; 
  
// function to print Minimum element using recursion 
int findMinRec(int A[], int n) 
{ 
    // if size = 0 means whole array has been traversed 
    if (n == 1) 
        return A[0]; 
    return min(A[n-1], findMinRec(A, n-1)); 
}

// function to return maximum element using recursion 
int findMaxRec(int A[], int n) 
{ 
    // if n = 0 means whole array has been traversed 
    if (n == 1) 
        return A[0]; 
    return max(A[n-1], findMaxRec(A, n-1)); 
}
  
// driver code to test above function 
int main() 
{ 
    int A[] = {1, 4, 45, 6, -50, 10, 2};
    int n = sizeof(A)/sizeof(A[0]);
    cout <<  findMinRec(A, n)<< endl;
    
    
cout <<  findMaxRec(A, n)<<endl;
    return 0; 
}

Complexity Analysis:

  • Time Complexity:O(n)
    • Since each element if visited exactly once.
  • Space Complexity:O(n)
    • Due to the recursion stack.

2 Approach: Divide and Conquer

Code Implementation in C++:

#include <iostream> 
using namespace std; 
  
// function to find Minimum element using divide and conquer
int findMin(int A[], int low, int high) 
{ 
    if (low == high) // if there is only one element
        return A[low]; 
  
    int mid = (low + high) / 2; // find the mid index
  
    // divide the array into two halves and recursively find the minimum in each half
    int leftMin = findMin(A, low, mid); 
    int rightMin = findMin(A, mid + 1, high); 
  
    // return the minimum of leftMin and rightMin
    return min(leftMin, rightMin); 
} 

// function to find Maximum element using divide and conquer
int findMax(int A[], int low, int high) 
{ 
    if (low == high) // if there is only one element
        return A[low]; 
  
    int mid = (low + high) / 2; // find the mid index
  
    // divide the array into two halves and recursively find the maximum in each half
    int leftMax = findMax(A, low, mid); 
    int rightMax = findMax(A, mid + 1, high); 
  
    // return the maximum of leftMax and rightMax
    return max(leftMax, rightMax); 
} 
  
// driver code to test above functions 
int main() 
{ 
    int A[] = {1, 4, 45, 6, -50, 10, 2}; 
    int n = sizeof(A)/sizeof(A[0]); 
    
    cout << "Minimum Element: " << findMin(A, 0, n - 1) << endl; 
    cout << "Maximum Element: " << findMax(A, 0, n - 1) << endl; 
    
    return 0; 
}

Complexity Analysis:

  • Time Complexity:O(n)
  • Space Complexity:O(log n)
    • Since at each level, the array is divided into two halves.
Buy Me A Coffee

Leave a comment

Your email address will not be published. Required fields are marked *

Your experience on this site will be improved by allowing cookies Cookie Policy