Bird
Raised Fist0
DSA Cprogramming~3 mins

Why Binary Search Recursive Approach in DSA C?

Choose your learning style10 modes available
The Big Idea

What if you could find a name in a phone book without flipping every page?

The Scenario

Imagine you have a huge phone book and you want to find a friend's number. You start from the first page and look at every name one by one until you find it.

The Problem

This way is very slow and tiring because you have to check many names before finding the right one. If the book is very big, it can take a long time and you might lose your place or make mistakes.

The Solution

Binary search uses a smart way to find the name quickly by always looking at the middle of the list and deciding which half to search next. The recursive approach does this by calling itself on smaller parts until it finds the name or knows it is not there.

Before vs After
✗ Before
int linear_search(int arr[], int size, int target) {
    for (int i = 0; i < size; i++) {
        if (arr[i] == target) return i;
    }
    return -1;
}
✓ After
int binary_search(int arr[], int left, int right, int target) {
    if (left > right) return -1;
    int mid = left + (right - left) / 2;
    if (arr[mid] == target) return mid;
    else if (arr[mid] > target) return binary_search(arr, left, mid - 1, target);
    else return binary_search(arr, mid + 1, right, target);
}
What It Enables

This approach lets you find items in sorted lists very fast, even if the list is huge.

Real Life Example

When you search for a word in a dictionary app, it quickly jumps to the middle and narrows down the search instead of reading every word.

Key Takeaways

Manual searching checks every item one by one, which is slow.

Binary search splits the list and searches halves recursively, making it fast.

Useful for quickly finding items in sorted lists or arrays.

Practice

(1/5)
1. What is the main idea behind the binary search recursive approach when searching for an element in a sorted array?
easy
A. Check every element one by one from start to end
B. Divide the array into halves and search recursively in the half where the element can be
C. Sort the array first and then search linearly
D. Use a queue to store elements and search iteratively

Solution

  1. Step 1: Understand binary search principle

    Binary search works by dividing the sorted array into two halves and deciding which half to search next based on comparison with the middle element.
  2. Step 2: Apply recursion in binary search

    The recursive approach calls the same function on the half where the target element might be, reducing the search space each time.
  3. Final Answer:

    Divide the array into halves and search recursively in the half where the element can be -> Option B
  4. Quick Check:

    Binary search = divide and conquer [OK]
Hint: Remember: binary search splits array, searches half recursively [OK]
Common Mistakes:
  • Thinking binary search checks every element
  • Not using recursion to reduce search space
  • Searching unsorted arrays with binary search
2. Which of the following is the correct base case condition in a recursive binary search function in C?
easy
A. if (low == high) return -1;
B. if (low < high) return -1;
C. if (low > high) return -1;
D. if (low >= high) return -1;

Solution

  1. Step 1: Understand base case in recursion

    The base case stops recursion when the search space is invalid, meaning low index is greater than high index.
  2. Step 2: Identify correct condition

    When low > high, it means the element is not found, so return -1 to indicate failure.
  3. Final Answer:

    if (low > high) return -1; -> Option C
  4. Quick Check:

    Base case = low > high [OK]
Hint: Base case ends when low index passes high index [OK]
Common Mistakes:
  • Using low == high as base case incorrectly
  • Returning wrong value in base case
  • Not handling base case leading to infinite recursion
3. What will be the output of the following C code snippet using recursive binary search?
int binarySearch(int arr[], int low, int high, int x) {
  if (low > high) return -1;
  int mid = low + (high - low) / 2;
  if (arr[mid] == x) return mid;
  else if (arr[mid] > x) return binarySearch(arr, low, mid - 1, x);
  else return binarySearch(arr, mid + 1, high, x);
}

int main() {
  int arr[] = {2, 4, 6, 8, 10};
  int n = 5;
  int result = binarySearch(arr, 0, n - 1, 6);
  printf("%d", result);
  return 0;
}
medium
A. 2
B. 1
C. -1
D. 3

Solution

  1. Step 1: Trace the recursive calls

    Initial call: low=0, high=4, mid=2, arr[2]=6 equals target 6, so return 2 immediately.
  2. Step 2: Understand output

    The function returns index 2 where element 6 is found, so printf prints 2.
  3. Final Answer:

    2 -> Option A
  4. Quick Check:

    Element 6 found at index 2 [OK]
Hint: Check mid index and compare to target first [OK]
Common Mistakes:
  • Confusing index with value
  • Off-by-one errors in mid calculation
  • Not returning correct index on match
4. Identify the error in the following recursive binary search function and select the fix:
int binarySearch(int arr[], int low, int high, int x) {
  if (low >= high) return -1;
  int mid = (low + high) / 2;
  if (arr[mid] == x) return mid;
  else if (arr[mid] > x) return binarySearch(arr, low, mid - 1, x);
  else return binarySearch(arr, mid + 1, high, x);
}
medium
A. Return mid + 1 instead of mid when found
B. Change mid calculation to mid = low - (high - low) / 2;
C. Remove else if condition and use only if
D. Change base case to if (low > high) return -1;

Solution

  1. Step 1: Analyze base case condition

    The base case uses if (low >= high) which incorrectly stops search when low equals high, missing the last element.
  2. Step 2: Correct base case

    It should be if (low > high) to allow checking when low equals high, ensuring all elements are searched.
  3. Final Answer:

    Change base case to if (low > high) return -1; -> Option D
  4. Quick Check:

    Base case must allow low == high [OK]
Hint: Base case must be low > high, not low >= high [OK]
Common Mistakes:
  • Stopping recursion too early
  • Incorrect mid calculation causing infinite recursion
  • Returning wrong index on match
5. Given a sorted array arr = {1, 3, 5, 7, 9, 11, 13}, you want to find the index of element 8 using recursive binary search. What will be the sequence of mid indices checked before concluding the element is not found?
hard
A. [3, 5, 4]
B. [3, 1, 0]
C. [3, 1, 2]
D. [3, 4, 5]

Solution

  1. Step 1: Calculate first mid index

    Initial low=0, high=6, mid = (0+6)/2 = 3, arr[3]=7 less than 8, search right half next.
  2. Step 2: Calculate second mid index

    New low=4, high=6, mid = (4+6)/2 = 5, arr[5]=11 greater than 8, search left half next.
  3. Step 3: Calculate third mid index

    New low=4, high=4, mid = (4+4)/2 = 4, arr[4]=9 greater than 8, search left half next low=4, high=3 ends recursion.
  4. Final Answer:

    [3, 5, 4] -> Option A
  5. Quick Check:

    Mid indices checked = 3, 5, 4 [OK]
Hint: Track low, high, mid updates carefully each recursion [OK]
Common Mistakes:
  • Not updating low and high correctly
  • Miscomputing mid index
  • Stopping search too early
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard