def bs_helper(datalist, key, lower, upper):
    if lower + 1 == upper:    # base case: range empty
        return None
    mid = (lower + upper)//2
    if key == datalist[mid]:  # base case: found key
        return mid
    if key < datalist[mid]:
        return bs_helper(datalist, key, lower, mid)
    else:
        return bs_helper(datalist, key, mid, upper)

def bsearch(datalist, key):
    return bs_helper(datalist, key, -1, len(datalist))
