From 7c621dfad4f87f1f24b2c8783ac5b9a369748c59 Mon Sep 17 00:00:00 2001 From: Mike323334 Date: Mon, 29 Dec 2025 15:25:25 -0500 Subject: [PATCH 1/2] Implement recursive binary search in Python This implementation includes a docstring with usage examples for the binary search function. --- searches/binary_search_recursion.py | 60 +++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 searches/binary_search_recursion.py diff --git a/searches/binary_search_recursion.py b/searches/binary_search_recursion.py new file mode 100644 index 000000000000..a8685af41f78 --- /dev/null +++ b/searches/binary_search_recursion.py @@ -0,0 +1,60 @@ +""" +Pure Python implementation of Recursive Binary Search. + +Binary Search is a divide-and-conquer algorithm that works on sorted lists. +""" + +from __future__ import annotations +from typing import Sequence, TypeVar + +T = TypeVar("T") + + +def binary_search_recursive( + arr: Sequence[T], + target: T, + left: int = 0, + right: int | None = None, +) -> int: + """ + Perform recursive binary search on a sorted sequence. + + :param arr: A sorted sequence of comparable elements + :param target: The element to search for + :param left: Left boundary of the search interval + :param right: Right boundary of the search interval + :return: Index of target if found, otherwise -1 + + >>> binary_search_recursive([1, 2, 3, 4, 5], 3) + 2 + >>> binary_search_recursive([1, 2, 3, 4, 5], 1) + 0 + >>> binary_search_recursive([1, 2, 3, 4, 5], 5) + 4 + >>> binary_search_recursive([1, 2, 3, 4, 5], 6) + -1 + >>> binary_search_recursive([], 10) + -1 + >>> binary_search_recursive([2, 4, 6, 8], 6) + 2 + """ + + if right is None: + right = len(arr) - 1 + + if left > right: + return -1 + + mid = left + (right - left) // 2 + + if arr[mid] == target: + return mid + if arr[mid] > target: + return binary_search_recursive(arr, target, left, mid - 1) + return binary_search_recursive(arr, target, mid + 1, right) + + +if __name__ == "__main__": + import doctest + + doctest.testmod() From 54267c109c5b729d68fdce271708ee606023f26a Mon Sep 17 00:00:00 2001 From: Mike323334 Date: Mon, 29 Dec 2025 18:25:27 -0500 Subject: [PATCH 2/2] Update import for Sequence --- searches/binary_search_recursion.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/searches/binary_search_recursion.py b/searches/binary_search_recursion.py index a8685af41f78..8642b4b84558 100644 --- a/searches/binary_search_recursion.py +++ b/searches/binary_search_recursion.py @@ -5,7 +5,10 @@ """ from __future__ import annotations -from typing import Sequence, TypeVar + +from typing import TypeVar +from collections.abc import Sequence + T = TypeVar("T")