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

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

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

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

Задача 1#25989

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

F (0) = 0;

F (n) = 3⋅F (n∕∕3), при n кратном 3, но не кратном 2 и 5;

F (n) = 2⋅F (n∕∕2), при некратном 3 и 5, но кратном 2 ;

F (n) = 5⋅F (n∕∕5), при n,кратном 5, но некратном 3 и 2;

F (n) = 2⋅n, при други х значениях n.

При каких значениях n  , F (n )  находится в диапазоне: от 1000  до 3000  включительно? В ответ укажите сумму четных значений n  .

 

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

Рекурсивное решение

В задаче задан рекурсивный алгоритм, при котором функция в процессе вычислений вызывает сама себя с другими аргументами. Для реализации создаём пользовательскую функцию в Python с помощью def  . Внутри функции используем условный оператор if  , чтобы задать ветвление. Далее требуется найти сумму чётных n, для которых значение попадает в заданный диапазон: 1000 ≤ F(n) ≤ 3000  . Поэтому перебираем только чётные n из отрезка с шагом 2, для каждого считаем F(n) по правилам и, если условие диапазона выполнено, прибавляем n к ответу.

def F(n):
    # База рекурсии
    if n == 0:
        return 0

    # Ветка 1: кратно 3, но НЕ кратно 2 и 5
    if n % 3 == 0 and n % 2 != 0 and n % 5 != 0:
        return 3 * F(n // 3)

    # Ветка 2: НЕ кратно 3 и 5, но кратно 2
    if n % 3 != 0 and n % 5 != 0 and n % 2 == 0:
        return 2 * F(n // 2)

    # Ветка 3: кратно 5, но НЕ кратно 3 и 2
    if n % 5 == 0 and n % 3 != 0 and n % 2 != 0:
        return 5 * F(n // 5)

    # Иначе формула без рекурсии
    return 2 * n

# Сумма чётных n, для которых 1000 <= F(n) <= 3000
ans = 0
# Перебираем только чётные n и проверяем диапазон значения
for i in range(0, 10000, 2):
    if 1000 <= F(i) <= 3000:
        # Накапливаем n в ответе
        ans += i

print(ans)

Ответ: 501000

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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