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

16.02 Две функции

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

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

Задача 1#26095

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

F (n) = 1, при n < 5;

F (n) = F(n∕∕5), если n > 4 и при этом n д ели тся на 5;

F (n) = n− 5 ∗(n∕∕5)+ F(n − 5 ∗(n∕∕5)), если n > 4 и при этом n не делится на 5;

G (n) = 1, при n < 7;

G (n) = G(n∕∕7), если n > 6 и при этом n дели тся на 7;

G (n) = n− 7 ∗(n∕∕7)+ G(n − 7∗(n∕∕7)),  если n > 6 и при этом n не делится на 7;

При каких (каком) значениях (значении) n, выражение: G (n) + F(n)  , меньше 3  . В качестве ответа укажите сумму таких значений n  .

(Например: G(a)+ F (a) < 3  , G (b)+ F (b) < 3  . В ответ указываем сумму a  и b  ).

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

Рекурсивное решение
В задаче заданы два рекурсивных алгоритма – функции F(n)  и G (n )  . Для реализации создаём две пользовательские функции в Python с помощью def  . В функции F  через условный оператор if  задаём базовый случай при n < 5  . Если n > 4  и делится на 5  , вызываем F  от n ∕∕5  . В остальных случаях вычисляем значение по рекурсивной формуле из условия. В функции G  аналогично: базовый случай при n < 7  , затем случай с n > 6  , кратным семи, и в остальных случаях – рекурсивная формула. Далее перебираем n  от 0  до 999  , проверяем условие G (n)+ F(n) < 3  , и если оно выполняется, добавляем n  к сумме. В конце выводим результат.

def f(n):  # объявляем функцию f(n)
    if n < 5:  # базовый случай
        return 1

    if n % 5 == 0:  # рекурсивный случай для n > 4, кратных 5
        return f(n // 5)

    # рекурсивный случай, сюда попадём при n > 4 и не кратных 5
    return n - 5 * (n // 5) + f(n - 5 * (n // 5))


def g(n):  # объявляем функцию g(n)
    if n < 7:  # базовый случай
        return 1

    if n % 7 == 0:  # рекурсивный случай для n > 6, кратных 7
        return g(n // 7)

    # рекурсивный случай, сюда попадём при n > 6 и не кратных 7
    return n - 7 * (n // 7) + g(n - 7 * (n // 7))


ans = 0  # счётчик для суммы подходящих n
for n in range(1000):
    if g(n) + f(n) < 3:  # проверяем, что n подходит
        ans += n  # добавляем в сумму само n

print(ans)

Ответ: 15

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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