←
examples/advanced/06_binary_search.cat
#!/usr/bin/env catnip
# Binary search (recursive)
# Shows boundary handling, recursion, multiple conditions, and is well-suited for tail-call optimization.
_bsearch = (arr, target, left, right) => {
if left > right {
-1
} else {
mid = (left + right) // 2
value = arr[mid]
if value == target {
mid
} elif value < target {
_bsearch(arr, target, mid + 1, right)
} else {
_bsearch(arr, target, left, mid - 1)
}
}
}
binary_search = (arr, target) => {
_bsearch(arr, target, 0, len(arr) - 1)
}
values = list(1, 3, 5, 7, 9, 11, 13, 15)
print("index of 7 =", binary_search(values, 7)) # → 'index of 7 = 3'