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

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

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

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

Задача 1#64023

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

F(0) = 0;

F(n) = F(n - 1) + 3, если n > 0 и при этом n mod 3 = 2;

F(n) = F((n - n mod 3) / 3), если n > 0 и при этом n mod 3 < 2.

Укажите наименьшее возможное n, для которого F(n) = 6. Если таких значений нет, в ответе укажите -1.

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

В задаче представлен рекурсивный алгоритм: функция F (n)  вычисляется в зависимости от остатка от деления n  на 3.

Если n = 0  , функция возвращает большое число (чтобы исключить ноль, так как n  – натуральное).

Если n > 0  и n%3 = 2  , вычисляем F(n) = F(n− 1)+ 3  .

Если n > 0  и n%3 < 2  , вычисляем F(n) = F((n− n%3 )∕3)  .

Внутри функции создаём ветвление для трёх случаев: n = 0  , n > 0  и n%3 = 2  , n > 0  и n%3 < 2  . После определения функции перебираем значения n  от 0 до 999 и находим наименьшее n  , для которого F (n ) = 6  .

def f(n):
    # Базовый случай: n = 0, возвращаем большое число, так как n должно быть натуральным
    if n == 0:
        return 99999999
    # Если n > 0 и остаток от деления на 3 равен 2, используем формулу F(n-1) + 3
    elif n > 0 and n % 3 == 2:
        return f(n - 1) + 3
    # Если n > 0 и остаток от деления на 3 меньше 2, используем формулу F((n - n % 3)/3)
    elif n > 0 and n % 3 < 2:
        return f((n - n % 3) / 3)

# Перебираем возможные значения n для поиска наименьшего, при котором F(n) = 6
for i in range(1000):
    if f(i) == 6:
        print(i)
        break  # Останавливаем цикл после нахождения наименьшего n

Ответ: -1

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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