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

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

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

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

Задача 1#30438

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

F (n) = 2∗ n+ 1  , при n < 6

F (n) = 2∗ F(n− 1)+ F (n ∕2)+ n  , если n > 5  и кратно 3

F (n) = 2∗ n∗n + F(n − 1)+ F(n∕2)  , если n > 5  и некратно 3

Чему равна сумма четных цифр числа, полученного при выполнении вызова F (85)  ?

Примечание: знак «/» обозначает целочисленное деление.

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

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

В задаче задан рекурсивный алгоритм, при котором функция в процессе вычислений вызывает сама себя с другими аргументами. Для реализации создаём пользовательскую функцию в Python с помощью def  . Внутри функции используем условный оператор if  , чтобы задать ветвление: при n < 6  F(n) = 2n + 1  ; при n > 5  и n  кратно 3  F (n ) = 2⋅F (n − 1)+ F(n∕∕2)+ n  ; при n > 5  и n  не кратно 3  F(n) = 2n2 + F(n − 1) + F(n∕∕2)  . После вычисления F (85)  нужно найти сумму чётных цифр результата.

def f(n):
    # База для n < 6:
    if n < 6:
        return 2 * n + 1
    # Ветвь 1: n > 5 и кратно 3
    if n > 5 and n % 3 == 0:
        return 2 * f(n - 1) + f(n // 2) + n
    # Ветвь 2: n > 5 и не кратно 3
    if n > 5 and n % 3 != 0:
        return 2 * n * n + f(n - 1) + f(n // 2)

После вычисления F (85)  нужно найти сумму чётных цифр результата. Для этого можно:

(1) преобразовать число в строку и просуммировать цифры из множества 0,2,4,6,8

s = str(f(85))

# Суммируем только чётные цифры (0,2,4,6,8)
sum_even = 0
for ch in s:
    d = int(ch)
    if d % 2 == 0:
        sum_even += d

print(sum_even)

(2) сделать арифметический разбор по разрядам, добавляя к сумме каждую чётную цифру.

ans = 0
res = f(85)
while res > 0:
    # Берём последнюю цифру
    digit = res % 10
    # Если цифра чётная, добавляем в сумму
    if digit % 2 == 0:
        ans += digit
    # Отбрасываем последнюю цифру
    res //= 10

print(ans)

Ответ: 24

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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