def binary_search_v2(ordered_list, x):
    """
        recursive implementation of a binary search algorithm
        - computes the size of the array, only once
        - do not rebuilds the array
    """

    # my implementation without array resizing + learnings from binary_search_tn
    # initializes the indexes
    start_index = 0
    end_index = len(ordered_list)-1

    # time impact
    # maybe the recursion is delaying the processing, see benchmark result for details
    # inner function to be run recursively
    def inner_runner(start_index, end_index):
        if start_index > end_index:
            return False

        middle_index = (start_index+end_index) / 2

        if x < ordered_list[middle_index]:
            return inner_runner(start_index, middle_index-1)
        elif x > ordered_list[middle_index]:
            return inner_runner(middle_index+1, end_index)
        else:
            return True

    return inner_runner(start_index, end_index)