📖 Scenario: You have a sorted list of book IDs in a library system. You want to find if a specific book ID exists using a fast method.
🎯 Goal: Build a recursive binary search function in Go to find a book ID in a sorted list.
📋 What You'll Learn
Create a sorted slice of integers called bookIDs with exact values
Create two integer variables left and right for the search range
Write a recursive function binarySearch that takes bookIDs, left, right, and target as parameters
The function returns the index of target if found, or -1 if not found
Call the function with the correct parameters and print the result
💡 Why This Matters
🌍 Real World
Binary search is used in many software systems to quickly find data in sorted lists, like searching for a book ID in a library database.
💼 Career
Understanding binary search helps in roles involving data processing, software development, and algorithm optimization.
Progress0 / 4 steps
1
Create the sorted list of book IDs
Create a slice of integers called bookIDs with these exact values: 2, 5, 8, 12, 16, 23, 38, 56, 72, 91
DSA Go
Hint
Use a slice literal with the exact numbers in order.
2
Set the initial search range variables
Create two integer variables called left and right. Set left to 0 and right to the last index of bookIDs (which is 9).
DSA Go
Hint
Remember the last index is length minus one.
3
Write the recursive binary search function
Write a recursive function called binarySearch that takes parameters bookIDs []int, left int, right int, and target int. It should return an int. Implement the binary search logic: if left is greater than right, return -1. Otherwise, find the middle index, compare bookIDs[middle] with target, and recursively search the left or right half accordingly.
DSA Go
Hint
Use the middle index formula and recursive calls for left and right halves.
4
Call the function and print the result
Call binarySearch with bookIDs, left, right, and target set to 23. Store the result in a variable called index. Then print index.
DSA Go
Hint
The index of 23 in the list is 5. Use fmt.Println to print the index.
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
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.
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.
Final Answer:
Divide the array into halves and search recursively in the half where the target may exist -> Option B
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
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.
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.
Final Answer:
func binarySearch(arr []int, target int, low int, high int) int -> Option C
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?
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
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.
Step 2: Correct the condition
Changing to low > high allows searching the last element when low equals high.
Final Answer:
Change condition to if low > high instead of low >= high -> Option A
Quick Check:
Base case must allow low == high search [OK]
Hint: Base case should be low > high, not low >= high [OK]
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
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.
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.
Final Answer:
When target found, check if previous element is same; if yes, search left half recursively -> Option A
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 unknownstrongwhile earning +1 Grip toward your certificate.