def binary_search(value, array, start_idx=None, end_idx=None):
    """
    Выболняет бинарный поиск значения в отсортированном по возрастанию массиве.

    :param value: Значение, которое необходимо найти.
    :param array: Массив поиска.
    :param start_idx: Начальный индекс поиска (для рекурсивного вызова)
    :param end_idx: Конечный индекс поиска (для рекурсивного вызова)
    :return: Возвращает индекс элемента массива, содержащего искомое значение. Либо -1, если такой элемент не найден.
    """
    if start_idx is None:
        start_idx = 0
    if end_idx is None:
        end_idx = len(array)

    array_length = end_idx - start_idx

    if array_length == 1:   # Базовый случай рекурсии
        if array[start_idx] == value:
            return start_idx
        else:
            return -1
    elif array_length <= 0:
        return

    middle_idx = start_idx + array_length // 2

    if value == array[middle_idx]:
        return middle_idx
    elif value < array[middle_idx]:
        return binary_search(value, array, start_idx, middle_idx)
    elif value > array[middle_idx]:
        return binary_search(value, array, middle_idx, end_idx)