I am implementing a binary search algorithm and my code is as shown bellow: def binary_search(a, x): left, right = 0, len(a) if right == 0: return -1 if x < a[0] or x > a[-1]: return -1 elif x == a[0]: return 0 elif x == a[-1]: return right - 1 mid = right // 2 a_mid = a[mid] if x == a_mid: return mid elif x < a_mid: return binary_search(a[left:mid], x) elif x > a_mid: idx = binary_search(a[mid+1:right], x) if idx == -1: return -1 else: return mid + 1 + idx I tested it and cannot find any way to improve it by complexity. Someone suggested that I may "have used an incorrect base condition to terminate your loop" but I still cannot figure out where the problem lies. Could anyone please help? Thanks in advance.