Coding Exercise: Binary Search Using Recursion

Find target in sorted array using divide-and-conquer: [1,3,5,7,9] target=5 → index 2.

Each step: mid check → left/right half → repeat.

Problem Statement

Input: Sorted array arr, target value

Output: Index of target or -1 if not found

Examples: [1,3,5,7], 5 → 2; [1,3,5,7], 4 → -1

Approach: Divide & Conquer

1. Base: left > right → -1 (not found)

2. mid = (left+right)/2

3. arr[mid] == target → return mid

4. arr[mid] > target → search left half

5. arr[mid] < target → search right half

Solution Code

C++
Recursive binary search
#include <iostream>
using namespace std;

int binarySearch(int arr[], int left, int right, int target) {
    // Base case: not found
    if (left > right) return -1;
    
    // Mid point
    int mid = left + (right - left) / 2;
    
    // Found
    if (arr[mid] == target) return mid;
    
    // Search left half
    if (arr[mid] > target)
        return binarySearch(arr, left, mid-1, target);
    
    // Search right half
    return binarySearch(arr, mid+1, right, target);
}

int main() {
    int arr[] = {1, 3, 5, 7, 9};
    int n = 5;
    int target = 5;
    
    int result = binarySearch(arr, 0, n-1, target);
    if (result != -1)
        cout << "Found at index " << result << endl;
    else
        cout << "Not found" << endl;
    return 0;
}

Dry Run: [2,4,6,8,10,12], target=8

TEXT
Step-by-step search
Step 1: [2,4,6,8,10,12] left=0,right=5, mid=2 → 6<8 → right half
Step 2: [8,10,12]     left=3,right=5, mid=4 → 10>8 → left half
Step 3: [8,10]        left=3,right=4, mid=3 → 8==8 → FOUND index 3 ✓

Test Cases

TEXT
Expected outputs
[1,3,5], 3 → 1
[1,3,5], 4 → -1
[1], 1 → 0
[], 1 → -1

Complexity Analysis

Time: O(log n) - halves search space

Space: O(log n) - recursion depth

Practice Variations

1. Find first/last occurrence

2. Binary search on rotated array

3. Count occurrences using binary search

Conclusion

Mastered recursive binary search! O(log n) divide-conquer.

Next: Merge sort or quicksort recursively.