@@ -80,6 +80,39 @@ def binary_search_std_lib(sorted_collection, item):
8080 return index
8181 return None
8282
83+ def binary_search_by_recursion (sorted_collection , item , left , right ):
84+
85+ """Pure implementation of binary search algorithm in Python by recursion
86+
87+ Be careful collection must be sorted, otherwise result will be
88+ unpredictable
89+ First recursion should be started with left=0 and right=(len(sorted_collection)-1)
90+
91+ :param sorted_collection: some sorted collection with comparable items
92+ :param item: item value to search
93+ :return: index of found item or None if item is not found
94+
95+ Examples:
96+ >>> binary_search_std_lib([0, 5, 7, 10, 15], 0)
97+ 0
98+
99+ >>> binary_search_std_lib([0, 5, 7, 10, 15], 15)
100+ 4
101+
102+ >>> binary_search_std_lib([0, 5, 7, 10, 15], 5)
103+ 1
104+
105+ >>> binary_search_std_lib([0, 5, 7, 10, 15], 6)
106+
107+ """
108+ midpoint = left + (right - left ) // 2
109+
110+ if sorted_collection [midpoint ] == item :
111+ return midpoint
112+ elif sorted_collection [midpoint ] > item :
113+ return binary_search_by_recursion (sorted_collection , item , left , right - 1 )
114+ else :
115+ return binary_search_by_recursion (sorted_collection , item , left + 1 , right )
83116
84117def __assert_sorted (collection ):
85118 """Check if collection is sorted, if not - raises :py:class:`ValueError`
0 commit comments