From 7c621dfad4f87f1f24b2c8783ac5b9a369748c59 Mon Sep 17 00:00:00 2001 From: Mike323334 Date: Mon, 29 Dec 2025 15:25:25 -0500 Subject: [PATCH 1/4] 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 a7df0f096a030695df607d7d298a70f107432ba7 Mon Sep 17 00:00:00 2001 From: Mike323334 Date: Mon, 29 Dec 2025 18:34:38 -0500 Subject: [PATCH 2/4] Refactor import for Sequence in binary_search_recursion Updated import statement for Sequence to use collections.abc. --- 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..74278ae8a8fd 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 collections.abc import Sequence +from typing import TypeVar + T = TypeVar("T") From 4d85065559da7981fa073d1c7c984f5cf35667f8 Mon Sep 17 00:00:00 2001 From: Mike323334 Date: Sat, 10 Jan 2026 13:12:23 -0500 Subject: [PATCH 3/4] Update binary_search_recursion.py --- searches/binary_search_recursion.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/searches/binary_search_recursion.py b/searches/binary_search_recursion.py index 74278ae8a8fd..8c0b3134e1d7 100644 --- a/searches/binary_search_recursion.py +++ b/searches/binary_search_recursion.py @@ -8,8 +8,6 @@ from collections.abc import Sequence from typing import TypeVar - - T = TypeVar("T") From 9ff273b6196a6f9b921d03503cb868fe0ec6b192 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Sat, 10 Jan 2026 18:12:42 +0000 Subject: [PATCH 4/4] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- searches/binary_search_recursion.py | 1 + 1 file changed, 1 insertion(+) diff --git a/searches/binary_search_recursion.py b/searches/binary_search_recursion.py index 8c0b3134e1d7..6fdd36d15271 100644 --- a/searches/binary_search_recursion.py +++ b/searches/binary_search_recursion.py @@ -8,6 +8,7 @@ from collections.abc import Sequence from typing import TypeVar + T = TypeVar("T")