Bird
Raised Fist0
DSA Goprogramming~10 mins

Binary Search Recursive Approach in DSA Go - Execution Trace

Choose your learning style10 modes available
Concept Flow - Binary Search Recursive Approach
Start with full array and target
↓
Calculate middle index
↓
Compare middle element with target
↓
Found
↓
Search left half
↓
Recursive call with new range
↓
Repeat steps
Start by checking the middle element. If it matches the target, stop. Otherwise, recursively search the left or right half depending on comparison.
Execution Sample
DSA Go
func binarySearch(arr []int, target, low, high int) int {
    if low > high {
        return -1
    }
    mid := (low + high) / 2
    if arr[mid] == target {
        return mid
    } else if target < arr[mid] {
        return binarySearch(arr, target, low, mid-1)
    } else {
        return binarySearch(arr, target, mid+1, high)
    }
}
This function searches for target in a sorted array recursively by dividing the search range.
Execution Table
StepOperationLowHighMidCompare arr[mid] with targetActionResult/Return
1Start search063arr[3]=7 vs target=55 < 7, search left halfCall binarySearch(arr, 5, 0, 2)
2Recursive call021arr[1]=3 vs target=55 > 3, search right halfCall binarySearch(arr, 5, 2, 2)
3Recursive call222arr[2]=5 vs target=5Found targetReturn index 2
4Return from recursion-----Return index 2 to previous calls
5Return from recursion-----Return index 2 to initial call
💡 Target found at index 2, recursion ends.
Variable Tracker
VariableStartAfter Step 1After Step 2After Step 3Final
low00222
high62222
mid-3122
return---22
Key Moments - 3 Insights
Why do we check if low > high at the start?
This condition (seen in Step 1) stops recursion when the search range is invalid, meaning the target is not in the array.
Why do we calculate mid as (low + high) / 2?
Calculating mid this way (Step 1) splits the current search range in half, focusing the search efficiently.
How does recursion narrow down the search range?
Each recursive call (Steps 2 and 3) updates low or high to search only the left or right half, reducing the problem size.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution table, what is the value of mid at Step 2?
A3
B2
C1
D0
💡 Hint
Check the 'Mid' column in the row for Step 2 in the execution_table.
At which step does the function find the target?
AStep 3
BStep 2
CStep 1
DStep 4
💡 Hint
Look for the row where 'Action' says 'Found target' in the execution_table.
If the target was 8 instead of 5, what would happen at Step 1?
ASearch left half because 8 < 7
BSearch right half because 8 > 7
CReturn index 3 immediately
DStop recursion because target not found
💡 Hint
Compare target with arr[mid] at Step 1 in the execution_table.
Concept Snapshot
Binary Search Recursive Approach:
- Input: sorted array, target, low, high indices
- Calculate mid = (low + high) / 2
- If arr[mid] == target, return mid
- Else if target < arr[mid], search left half (low to mid-1)
- Else search right half (mid+1 to high)
- Stop when low > high (target not found)
Full Transcript
Binary Search Recursive Approach starts by checking the middle element of the current search range. If it matches the target, the function returns the index. If the target is smaller, the function recursively searches the left half. If larger, it searches the right half. This process repeats until the target is found or the search range is invalid (low > high), which means the target is not in the array. The execution table shows each recursive call's low, high, mid values, comparisons, and actions. The variable tracker follows how low, high, mid, and return values change step-by-step. Key moments clarify why the base condition is needed, how mid is calculated, and how recursion narrows the search. The visual quiz tests understanding of mid calculation, target finding step, and behavior when target changes.

Practice

(1/5)
1. What is the main idea behind the binary search recursive approach on a sorted array?
easy
A. Sort the array first and then search linearly
B. Divide the array into halves and search recursively in the half where the target may exist
C. Search each element one by one from start to end
D. Use a queue to store elements and search iteratively

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 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 might be, reducing the search space each time.
  3. Final Answer:

    Divide the array into halves and search recursively in the half where the target may exist -> Option B
  4. Quick Check:

    Binary search = divide and conquer [OK]
Hint: Remember: binary search splits array and searches half recursively [OK]
Common Mistakes:
  • Trying to search linearly instead of dividing
  • Not using recursion properly
  • Ignoring that array must be sorted
2. Which of the following is the correct function signature for a recursive binary search in Go?
easy
A. func binarySearch(arr []int, target int, mid int) int
B. func binarySearch(arr []int, target int) int
C. func binarySearch(arr []int, target int, low int, high int) int
D. func binarySearch(arr []int) int

Solution

  1. Step 1: Identify parameters needed for recursion

    Recursive binary search needs the array, target, and the current low and high indices to know the search range.
  2. Step 2: Check function signatures

    func binarySearch(arr []int, target int, low int, high int) int includes low and high indices, which are essential for recursion. Others miss these or have incorrect parameters.
  3. Final Answer:

    func binarySearch(arr []int, target int, low int, high int) int -> Option C
  4. Quick Check:

    Parameters include low and high indices [OK]
Hint: Recursive binary search needs low and high index parameters [OK]
Common Mistakes:
  • Omitting low and high indices in parameters
  • Adding unnecessary parameters like mid
  • Using wrong return types
3. What will be the output of the following Go code snippet?
func binarySearch(arr []int, target, low, high int) int {
    if low > high {
        return -1
    }
    mid := (low + high) / 2
    if arr[mid] == target {
        return mid
    } else if arr[mid] > target {
        return binarySearch(arr, target, low, mid-1)
    } else {
        return binarySearch(arr, target, mid+1, high)
    }
}

func main() {
    arr := []int{2, 4, 6, 8, 10}
    result := binarySearch(arr, 6, 0, len(arr)-1)
    fmt.Println(result)
}
medium
A. 0
B. 3
C. -1
D. 2

Solution

  1. Step 1: Trace the recursive calls for target 6

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

    Since target found at index 2, output is 2.
  3. Final Answer:

    2 -> Option D
  4. Quick Check:

    Target 6 found at index 2 [OK]
Hint: Check mid index value first to find target quickly [OK]
Common Mistakes:
  • Confusing index with value
  • Not updating low and high correctly
  • Returning wrong index or -1 incorrectly
4. Identify the error in the following recursive binary search function and select the fix:
func binarySearch(arr []int, target, low, high int) int {
    if low >= high {
        return -1
    }
    mid := (low + high) / 2
    if arr[mid] == target {
        return mid
    } else if arr[mid] > target {
        return binarySearch(arr, target, low, mid-1)
    } else {
        return binarySearch(arr, target, mid+1, high)
    }
}
medium
A. Change condition to if low > high instead of low >= high
B. Change mid calculation to mid := (low + high + 1) / 2
C. Return 0 instead of -1 when not found
D. Remove else if and use only if statements

Solution

  1. Step 1: Analyze base case condition

    The base case should stop recursion when low is greater than high, meaning no elements left to search. Using low >= high skips searching when low equals high, missing that element.
  2. Step 2: Correct the condition

    Changing to low > high allows searching the last element when low equals high.
  3. Final Answer:

    Change condition to if low > high instead of low >= high -> Option A
  4. Quick Check:

    Base case must allow low == high search [OK]
Hint: Base case should be low > high, not low >= high [OK]
Common Mistakes:
  • Stopping recursion too early with wrong base case
  • Incorrect mid calculation causing infinite recursion
  • Returning wrong default value when not found
5. Given a sorted array with possible duplicate elements, how can you modify the recursive binary search to find the first occurrence of a target value?
hard
A. When target found, check if previous element is same; if yes, search left half recursively
B. Return the first found index immediately without further checks
C. Search only the right half recursively after finding target
D. Use linear search after binary search to find first occurrence

Solution

  1. Step 1: Understand duplicates in binary search

    Standard binary search returns any occurrence of target. To find first occurrence, we must check if earlier elements are also equal.
  2. Step 2: Modify recursion to check left side

    When target found at mid, check if mid is first index or previous element is different. If previous element is same, recursively search left half to find earlier occurrence.
  3. Final Answer:

    When target found, check if previous element is same; if yes, search left half recursively -> Option A
  4. Quick Check:

    Check left side for first occurrence [OK]
Hint: On finding target, move left if previous equals target [OK]
Common Mistakes:
  • Returning first found index without checking duplicates
  • Searching right half instead of left for first occurrence
  • Using linear 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