Тема 16. Рекурсивные алгоритмы

16.01 Одна функция

Вспоминай формулы по каждой теме
Решай новые задачи каждый день
Вдумчиво разбирай решения
ШКОЛКОВО.
Готовиться с нами - ЛЕГКО!
Подтемы раздела рекурсивные алгоритмы
Решаем задачу:

Ошибка.
Попробуйте повторить позже

Задача 1#58256

Алгоритм вычисления значения функции F(n)  , где n  — целое положительное число, задан следующими соотношениями:

F (n) = n  , если log (n)
  2  целое число

F (n) = f(n− 1)+ 2,  иначе

Чему равно f(786432)  ?

Показать ответ и решение

Проанализируем, как изменяются значения на определенных значениях функции с помощью программы.

# Функция для проверки, является ли число степенью двойки
def power_of_2(n):
    # Пока n натурально
    while n > 1:
        # Если n не кратно 2
        if n % 2 != 0:
            # Так как это не единица (условие while проверяет это),
            # то это иное нечётное натуральное число, значит точно не степень двойки
            return False
        # Если же чётно, то у этого числа есть возможность быть
        # степенью двойки
        n //= 2
    # Если мы не вышли из цикла ранее, то число не имеет иных простых делителей,
    # кроме двойки, значит это точно степнь двойки
    return True

# Функция из условия
def f(n):
    # Если число — степень двойки, то log будет целым
    if power_of_2(n):
        return n
    # Иначе рекурсивный случай
    else:
        return f(n - 1) + 2

Заметим, что функция от степеней двойки выводит само число, а для остальных получается значение (число− [ближайш ая степень двойки]) ∗2+ [ближайш ая степень двой&#x0  . И так до следующей степени двойки.

Заметим, что 219 < 786432 < 220  . Посчитаем значение f(786432)  по формуле, которую определили:

print((786432  - 2 ** 19) * 2 + 2 ** 19)

Ответ: 1048576

Специальные программы

Все специальные программы

Программа
лояльности v2.0

Приглашай друзей в Школково и получай вознаграждение до 10%!

Крути рулетку
и выигрывай призы!

Крути рулетку и покупай курсы со скидкой, которая привязывается к вашему аккаунту.

Бесплатное онлайн-обучение

Для школьников из приграничных территорий России, проживающих в ДНР, ЛНР, Херсонской, Запорожской, Белгородской, Курской, Брянской областях и Крыму.

Налоговые вычеты

Узнай, как получить налоговый вычет при оплате обучения в «Школково».

Специальное предложение
для учителей

Бесплатный доступ к любому курсу подготовки к ЕГЭ, ОГЭ и олимпиадам от «Школково». Мы с вами делаем общее и важное дело, а потому для нас очень значимо быть чем-то полезными для учителей по всей России!

Вернём деньги за курс
за твою сотку на ЕГЭ

Сдать экзамен на сотку и получить обратно деньги за подготовку теперь вполне реально!

cyberpunkMouse
cyberpunkMouse
Рулетка
Вы можете получить скидку в рулетке!