Bird
Raised Fist0
DSA C#programming~10 mins

Binary Search Recursive Approach in DSA C# - Execution Trace

Choose your learning style10 modes available
Concept Flow - Binary Search Recursive Approach
Start with full array range
↓
Calculate middle index
↓
Compare middle element with target
↓
Found
↓
Search left half
↓
Recursive call with new range
↓
Repeat steps
The recursive binary search divides the array range by half each time, comparing the middle element to the target, and recursively searching the left or right half until found or range is empty.
Execution Sample
DSA C#
int BinarySearch(int[] arr, int target, int left, int right) {
  if (left > right) return -1;
  int mid = left + (right - left) / 2;
  if (arr[mid] == target) return mid;
  if (arr[mid] > target) return BinarySearch(arr, target, left, mid - 1);
  else return BinarySearch(arr, target, mid + 1, right);
}
This code recursively searches for target in sorted array arr between indices left and right.
Execution Table
StepOperationLeftRightMidMid ValueComparisonNext RangeResultVisual State
1Start search06377 vs 3: 7 > 3Left=0, Right=2-[1, 3, 5, 7, 9, 11, 13]
2Recursive call02133 vs 3: 3 == 3-Return 1[1, 3, 5, 7, 9, 11, 13]
3Return final------Index 1 found[1, 3, 5, 7, 9, 11, 13]
💡 Target found at index 1, recursion ends.
Variable Tracker
VariableStartAfter Step 1After Step 2Final
left0000
right6222
mid-311
result--11
Key Moments - 3 Insights
Why do we check if left > right before calculating mid?
Because when left > right, the search range is empty, so the target is not found. This is shown in execution_table step 1 where the recursion stops if this condition is true.
Why do we calculate mid as left + (right - left) / 2 instead of (left + right) / 2?
To avoid integer overflow when left and right are large. This calculation safely finds the middle index, as seen in variable_tracker mid values.
What happens if the target is not in the array?
The recursion will eventually have left > right, triggering the base case to return -1, indicating target not found. This is the exit condition in execution_table.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table, what is the mid index at step 1?
A0
B3
C1
D6
💡 Hint
Check the 'Mid' column in execution_table row for step 1.
At which step does the target get found?
AStep 3
BStep 1
CStep 2
DTarget not found
💡 Hint
Look at the 'Comparison' and 'Result' columns in execution_table.
If the target was 10 instead of 3, what would be the next range after step 1?
ALeft=4, Right=6
BLeft=0, Right=2
CLeft=0, Right=6
DLeft=3, Right=3
💡 Hint
Compare 'Mid Value' with target and see which half is searched next in execution_table.
Concept Snapshot
Binary Search Recursive Approach:
- Input: sorted array, target, left and right indices
- Calculate mid = left + (right - left) / 2
- If arr[mid] == target, return mid
- If arr[mid] > target, search left half recursively
- Else, search right half recursively
- Base case: if left > right, return -1 (not found)
Full Transcript
Binary Search Recursive Approach divides the array range by half each step. It calculates the middle index and compares the middle element with the target. If equal, it returns the index. If the middle element is greater, it searches the left half recursively. Otherwise, it searches the right half recursively. The base case stops recursion when the search range is empty (left > right). This approach efficiently finds the target or returns -1 if not found.

Practice

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

Solution

  1. Step 1: Understand binary search logic

    Binary search works by dividing the sorted array into two halves and deciding which half to search next based on the middle element.
  2. Step 2: Recognize recursive approach

    The recursive approach calls the same search function on the half where the target value may exist, reducing the search space each time.
  3. Final Answer:

    Divide the array into halves and search recursively in the half where the value can be. -> Option D
  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 linearly
  • Not realizing array must be sorted first
  • Confusing iterative and recursive approaches
2. Which of the following is the correct base case condition in a recursive binary search function in C#?
easy
A. if (array[start] == target) return start;
B. if (start == end) return start;
C. if (start > end) return -1;
D. if (end < start) return 0;

Solution

  1. Step 1: Identify base case meaning

    The base case stops recursion when the search space is invalid, meaning start index is greater than end index.
  2. Step 2: Match condition to code

    The condition if (start > end) return -1; correctly indicates the target is not found.
  3. Final Answer:

    if (start > end) return -1; -> Option C
  4. Quick Check:

    Base case = invalid range returns -1 [OK]
Hint: Base case: start index passes end index means not found [OK]
Common Mistakes:
  • Using wrong comparison like start == end as base case
  • Returning 0 which can be a valid index
  • Not handling base case causing infinite recursion
3. What will be the output of the following C# code snippet?
int[] arr = {2, 4, 6, 8, 10};
int result = BinarySearch(arr, 0, arr.Length - 1, 6);
Console.WriteLine(result);

int BinarySearch(int[] array, int start, int end, int target) {
    if (start > end) return -1;
    int mid = (start + end) / 2;
    if (array[mid] == target) return mid;
    else if (array[mid] > target) return BinarySearch(array, start, mid - 1, target);
    else return BinarySearch(array, mid + 1, end, target);
}
medium
A. 2
B. 3
C. -1
D. 1

Solution

  1. Step 1: Trace initial call and mid calculation

    Initial call: start=0, end=4, mid=(0+4)/2=2. array[2]=6 matches target 6.
  2. Step 2: Return mid index

    Since array[mid] == target, function returns 2 immediately.
  3. Final Answer:

    2 -> Option A
  4. Quick Check:

    Target found at index 2 [OK]
Hint: Check mid index first; if match, return immediately [OK]
Common Mistakes:
  • Miscomputing mid index
  • Returning wrong index due to off-by-one errors
  • Confusing array values with indices
4. Identify the error in this recursive binary search function and choose the correct fix:
int BinarySearch(int[] array, int start, int end, int target) {
    if (start >= end) return -1;
    int mid = (start + end) / 2;
    if (array[mid] == target) return mid;
    else if (array[mid] > target) return BinarySearch(array, start, mid - 1, target);
    else return BinarySearch(array, mid + 1, end, target);
}
medium
A. Change mid calculation to mid = (start + end + 1) / 2;
B. Change base case to if (start > end) return -1;
C. Return 0 instead of -1 in base case.
D. Remove the base case entirely.

Solution

  1. Step 1: Analyze base case condition

    The base case uses start >= end, which wrongly excludes the case when start == end, missing the last element check.
  2. Step 2: Correct base case to allow checking when start == end

    Changing to start > end ensures the last element is checked before stopping recursion.
  3. Final Answer:

    Change base case to if (start > end) return -1; -> Option B
  4. Quick Check:

    Base case must allow start == end check [OK]
Hint: Base case should be start > end, not start >= end [OK]
Common Mistakes:
  • Stopping recursion too early with wrong base case
  • Changing mid calculation unnecessarily
  • Returning 0 which can be a valid index
5. Given a sorted array with possible duplicate values, how can you modify the recursive binary search to find the first occurrence of a target value?
hard
A. When array[mid] == target, continue searching left half to find earlier occurrence.
B. Return mid immediately when array[mid] == target.
C. Search right half only when array[mid] == target.
D. Use linear search after binary search to find first occurrence.

Solution

  1. Step 1: Understand duplicates and first occurrence

    Duplicates mean target can appear multiple times; to find first occurrence, we must check if earlier indices also have the target.
  2. Step 2: Modify recursion to search left half when target found

    When array[mid] == target, recursively search left half to find if target appears earlier; if none found, return current mid.
  3. Final Answer:

    When array[mid] == target, continue searching left half to find earlier occurrence. -> Option A
  4. Quick Check:

    Find first occurrence by searching left half on match [OK]
Hint: On match, search left half to find first occurrence [OK]
Common Mistakes:
  • Returning first found index without checking left side
  • Searching right half on match which finds last occurrence
  • Using linear search after binary search unnecessarily
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