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

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

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

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

Задача 61#29363Максимум баллов за задание: 1

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

F (n) = 3⋅n + n⋅n  , если n < 2

F (n) = F(n − 2) +F (n∕2)  , если n > 1  и четно

F (n) = F(n − 2) +F (n− 3)  , если n > 1  и нечетно

Чему будет равно значение, вычисленное при выполнении вызова F(29)  ?

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

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

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

def f(n):
    # База n < 2:
    if n < 2:
        return 3 * n + n * n

    # Чётный n > 1:
    if n % 2 == 0:
        return f(n - 2) + f(n // 2)

    # Нечётный n > 1:
    return f(n - 2) + f(n - 3)

print(f(29))

Ответ: 1180

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

Задача 62#29451Максимум баллов за задание: 1

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

F (n) = n  , при n < 3  ;

F (n) = 4⋅F (n − 1)− 2⋅F (n − 2)⋅F(n − 3)  , при n > 2

Чему равно значение выражения F(6)+ F (7)  ?

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

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

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

def F(n):
    # База: если n < 3, возвращаем n
    if n < 3:
        return n
    # Рекурсивная формула для n > 2
    elif n > 2:
        return 4 * F(n - 1) - 2 * F(n - 2) * F(n - 3)

print(F(6) + F(7))

Ответ: -5120

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

Задача 63#30431Максимум баллов за задание: 1

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

F (1) = 1

F (n) = F(n − 1) ∗n  , при n > 1

Чему равно значение функции F(7)? В ответе запишите только натуральное число.

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

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

В задаче задан рекурсивный алгоритм, при котором функция в процессе вычислений вызывает сама себя с другими аргументами. Для реализации создаём пользовательскую функцию в Python с помощью def  . Внутри функции используем условный оператор if  , чтобы задать ветвление: F(1) = 1  ; при n > 1  : F (n) = F (n − 1)⋅n  . Реализуем функцию по формуле и вычислим F(7)  прямым вызовом.

def f(n):
    # Базовый случай при n = 1:
    if n == 1:
        return 1
    # Рекурсия: F(n) = F(n-1) * n
    return f(n - 1) * n

print(f(7))

Ответ: 5040

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

Задача 64#30432Максимум баллов за задание: 1

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

F (1) = 1

F (n) = F(n − 1) ∗n ∗n+ F (n− 1)  , при n > 1

Чему равно значение функции F(5)? В ответе запишите только натуральное число.

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

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

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

def f(n):
    # Базовый случай при n = 1:
    if n == 1:
        return 1
    # Рекуррентная формула для n > 1:
    return f(n - 1) * n * n + f(n - 1)

print(f(5))

Ответ: 22100

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

Задача 65#30433Максимум баллов за задание: 1

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

F (1) = 0

F (2) = 1

              2          2
F (n) = F(n − 1) + F (n− 2)  , при n > 2

Чему равно значение функции F(7)? В ответе запишите только натуральное число.

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

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

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

def f(n):
    # Базовый случай 1: если n = 1, возвращаем 0
    if n == 1:
        return 0
    # Базовый случай 2: если n = 2, возвращаем 1
    if n == 2:
        return 1
    # Рекурсивный случай: F(n) = [F(n - 1)]² + [F(n - 2)]²
    return f(n - 1) ** 2 + f(n - 2) ** 2

print(f(7))

Ответ: 866

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

Задача 66#30434Максимум баллов за задание: 1

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

F (1) = 0

F (2) = 1

F (3) = 1

F (n) = F(n − 1) − F (n− 1)+ 2(n−1) + F(n− 2)  , при n > 3

Чему будет равно значение, вычисленное при выполнении вызова F(15)  ?

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

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

В задаче задан рекурсивный алгоритм, при котором функция в процессе вычислений вызывает сама себя с другими аргументами. Для реализации создаём пользовательскую функцию в Python с помощью def  . Внутри функции используем условный оператор if  , чтобы задать ветвление: F(1) = 0  , F(2) = 1  , F (3) = 1  и, для n > 3  , рекуррентной формулой F (n ) = F(n − 1)− F(n− 1)+ 2n−1 + F(n− 2)  . Реализуем рекурсивно по определению и вычислим F (15)  вызовом функции.

def f(n):
    # База: F(1) = 0
    if n == 1:
        return 0
    # База: F(2) = 1 и F(3) = 1
    if n == 2 or n == 3:
        return 1
    # Рекуррентная формула для n > 3:
    return f(n - 1) - f(n - 1) + 2 ** (n - 1) + f(n - 2)

print(f(15))

Ответ: 21841

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

Задача 67#30435Максимум баллов за задание: 1

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

F (1) = 1  , F(2) = 1  , F (3) = 1

F (n) = F(n − 1) +F (n− 3)+ F (n ∕3)  , если n > 3  и четно

F (n) = F(n − 2) +F (n− 1)  , если n > 3  и нечетно

Чему будет равно значение, вычисленное при выполнении вызова F(30)  ?

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

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

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

def F(n):
    # Базовый случай: если n = 1, 2 или 3, возвращаем 1
    if n == 1 or n == 2 or n == 3:
        return 1
    # Рекурсивный случай: если n > 3 и n чётное
    if n > 3 and n % 2 == 0:
        return F(n - 1) + F(n - 3) + F(n // 3)
    # Рекурсивный случай: если n > 3 и n нечётное
    if n > 3 and n % 2 != 0:
        return F(n - 2) + F(n - 1)

print(F(30))

Ответ: 248055

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

Задача 68#30436Максимум баллов за задание: 1

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

F (n) = 2n  , при n < 4

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

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

Чему будет равно значение, вычисленное при выполнении вызова F(241)  ?

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

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

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

def f(n):
    # Базовый случай при n < 4:
    if n < 4:
        return 2 ** n

    # Случай для чётных n > 3:
    if n > 3 and n % 2 == 0:
        return 2 * f(n - 1) + f(n // 2)

    # Случай для нечётных n > 3:
    if n > 3 and n % 2 != 0:
        return f(n - 2) + 1 ** n + f(n // 5)

print(f(241))

Ответ: 24182

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

Задача 69#30437Максимум баллов за задание: 1

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

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

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

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

Сколько четных цифр содержит результат выполнения вызова F (514)  ?

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

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

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

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

def f(n):
    # База при n < 3:
    if n < 3:
        return 2 * (n - 1) + 3 * n
    # Случай: n > 2 и кратно 5
    if n > 2 and n % 5 == 0:
        return 2 * f(n - 2) + f(n // 2) - 2 ** n
    # Случай: n > 2 и не кратно 5
    if n > 2 and n % 5 != 0:
        return 2 ** n + f(n - 2) - 3 * n + f(n // 3)

Далее найдём количество чётных цифр в f(514)  . Первый способ предлагает перевести значение f(514)  в строку и вызвать функцию count  по строке для каждой из чётных цифр.

s = str(f(514))
print(s.count("0") + s.count("2") + s.count("4") + s.count("6") + s.count("8"))

Вторым способом мы перводим значение в строку и проходимся циклом for по строке, и если цифра кратна двойке, то обновляем счётчик.

s = str(f(514))
counter = 0
for i in s:
    if int(i) % 2 == 0:
        counter += 1
print(counter)

Ответ: 75

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

Задача 70#30438Максимум баллов за задание: 1

Алгоритм вычисления значения функции 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

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

Задача 71#30439Максимум баллов за задание: 1

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

F (n) = n∗ n+ n ∗2  , при n > 15

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

Определите количество натуральных значений n  из отрезка [1;1000]  , при которых значение F (n )  кратно 5.

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

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

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

def F(n):
    # Если n > 15, возвращаем n*n + n*2
    if n > 15:
        return n * n + n * 2
    # Если n <= 15, рекурсивно считаем F(n+2) + 2*F(n+1)
    if n <= 15:
        return F(n + 2) + 2 * F(n + 1)

sum = 0
# Перебираем все n от 1 до 1000
for i in range(1, 1000 + 1):
    # Если F(i) делится на 5 без остатка, увеличиваем счётчик
    if F(i) % 5 == 0:
        sum += 1

print(sum)

Ответ: 394

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

Задача 72#30440Максимум баллов за задание: 1

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

F (n) = 2n + 3  , при n > 10

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

Определите количество значений n  из отрезка [− 1000;1000]  , при которых значение F (n)  кратно 3.

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

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

В задаче задан рекурсивный алгоритм, при котором функция в процессе вычислений вызывает сама себя с другими аргументами. Для реализации создаём пользовательскую функцию в Python с помощью def  . Внутри функции используем условный оператор if  , чтобы задать ветвление. Для n > 10  используем явную формулу F (n ) = 2n +3  . Для n ≤ 10  рекуррентно считаем по F (n) = F(n + 2)+ 2⋅F (n + 1)  . Нужно перебрать все целые   n  из отрезка [− 1000;1000]  и посчитать, для скольких F (n)  кратно 3  . Чтобы рекурсия работала быстро и не упиралась в глубину, увеличим лимит рекурсии и запомним уже вычисленные значения с помощью кеширования.

from functools import lru_cache
import sys

# Увеличиваем максимально допустимую глубину рекурсии
sys.setrecursionlimit(10000000)

@lru_cache(None)
def f(n):
    # Ветка: n > 10 — используем явную формулу
    if n > 10:
        return 2 ** n + 3
    # Иначе: n <= 10 — рекуррентная формула
    else:
        return f(n + 2) + 2 * f(n + 1)

# Считаем, для скольких n из [-1000; 1000] значение F(n) кратно 3
ans = 0
for i in range(-1000, 1001):
    if f(i) % 3 == 0:
        ans += 1

print(ans)

Ответ: 253

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

Задача 73#30441Максимум баллов за задание: 1

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

F (n) = n∗ n∗ n  , при n > 32

F (n) = F(n ∗2)+ (n∕∕3)∗n  , при n <= 32

Определите количество натуральных значений n  из отрезка [1;1000]  , при которых значение F(n)  заканчивается на 3.

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

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

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

В задаче задан рекурсивный алгоритм, при котором функция в процессе вычислений вызывает сама себя с другими аргументами. Для реализации создаём пользовательскую функцию в Python с помощью def  . Внутри функции используем условный оператор if  , чтобы задать ветвление. Для n > 32  :         3
F(n) = n  . Для n ≤ 32  : F (n ) = F(n ⋅2)+ (n ∕∕3) ⋅n  . Нужно перебрать все натуральные n ∈ [1,1000]  , вычислить F(n)  и посчитать, у скольких значений последняя цифра равна 3.

def f(n):
    # Ветка для n > 32:
    if n > 32:
        return n ** 3
    # Ветка для n <= 32:
    else:
        return f(n * 2) + (n // 3) * n

# Счётчик подходящих n
ans = 0

# Перебираем все n от 1 до 1000 включительно
for i in range(1, 1000 + 1):
    # Проверяем, что последняя цифра F(i) равна 3
    if f(i) % 10 == 3:
        ans += 1

print(ans)

Ответ: 98

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

Задача 74#30442Максимум баллов за задание: 1

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

F (n) = n∗ n+ 15  , при n < 32

F (n) = F(n∕2)+ 15+ F (n− 1)  , при n >= 32

Определите количество натуральных значений n  из отрезка [1;100]  , при которых значение F(n)  заканчивается на ′F′ в 16 системе счисления.

Примечание: знак </> в данной задаче означает целочисленное деление.

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

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

В задаче задан рекурсивный алгоритм, при котором функция в процессе вычислений вызывает сама себя с другими аргументами. Для реализации создаём пользовательскую функцию в Python с помощью def  . Внутри функции используем условный оператор if  , чтобы задать ветвление. Если n < 32  , то         2
F (n) = n +15  . Если n ≥ 32  , то F(n) = F(n∕∕2)+ 15+ F (n − 1)  . Нужно перебрать все натуральные n  из диапазона [1;100]  , вычислить F (n )  и проверить, заканчивается ли число на F  в шестнадцатеричной системе. Это то же, что и F (n )%16 = 15  .

def f(n):
    if n < 32:
        # Для n < 32:
        return n ** 2 + 15
    else:
        # Для n >= 32:
        return f(n // 2) + 15 + f(n - 1)

# Cчётчик подходящих n
ans = 0
# Перебор всех n от 1 до 100 включительно
for i in range(1, 100 + 1):
    # Проверяем, что последняя цифра в hex-формате равна ’F’ (т.е. 15)
    if f(i) % 16 == 15:
        ans += 1

print(ans)

Ответ: 8

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

Задача 75#30443Максимум баллов за задание: 1

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

F (n) = 2∗ n+ 10  , при n < 3

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

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

Определите количество натуральных значений n  из отрезка [1;300]  , при которых значение F (n )  превышает   7
10  .

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

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

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

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

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

# Счётчик подходящих n
ans = 0
# Перебираем n в [1; 300]
for i in range(1, 300 + 1):
    # Проверяем условие F(n) > 10 ** 7
    if f(i) > 10 ** 7:
        ans += 1
print(ans)

Ответ: 164

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

Задача 76#30444Максимум баллов за задание: 1

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

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

F (n) = F(n∕2)+ 1  , когда n >= 2  и чётное

F (n) = F(n − 3) +3  , когда n > 2  и нечётное

Назовите минимальное значение n, для которого F(n)  равно 31.

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

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

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

def f(n):
    # База для n < 2:
    if n < 2:
        return 1
    # Чётный случай:
    if n >= 2 and n % 2 == 0:
        return f(n // 2) + 1
    # Нечётный случай:
    if n > 2 and n % 2 != 0:
        return f(n - 3) + 3

# Ищем минимальное n, для которого f(n) == 31
for i in range(1, 10000000):
    if f(i) == 31:
        # Нашли первое подходящее n и остановка
        print(i)
        break

Ответ: 893

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

Задача 77#30445Максимум баллов за задание: 1

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

F (n) = n+ tg(n)  , при n < 12  , где tg(n)  - означает целую часть значения тангенса от n.

F (n) = F(n∕2)+ 1  , когда n >= 12  и кратно 6

F (n) = F(n − 3) +3  , когда n > 12  и некратно 6

Назовите минимальное значение n, для которого F(n)  равно 17.

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

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

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

import math

def f(n):
    # Случай 1: n < 12
    if n < 12:
        return n + int(math.tan(n))
    # Случай 2: n >= 12 и кратно 6
    if n >= 12 and n % 6 == 0:
        return f(n // 2) + 1
    # Случай 3: n > 12 и не кратно 6
    if n > 12 and n % 6 != 0:
        return f(n - 3) + 3


# Ищем минимальное n, для которого F(n) = 17
for i in range(1, 10_000_000):
    if f(i) == 17:
        print(i)
        break

Ответ: 45

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

Задача 78#30447Максимум баллов за задание: 1

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

F (n) = n  , при n < 4

F (n) = n+ F (n − 1)∗2  , если n > 3  и остаток от деления n  на 3 равен 0

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

F (n) = F(n − 1) +n2  , если n > 3  и остаток от деления n  на 3 равен 2

Чему будет равно значение, вычисленное при выполнении вызова F(55)  ?

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

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

В задаче задан рекурсивный алгоритм, при котором функция в процессе вычислений вызывает сама себя с другими аргументами. Для реализации создаём пользовательскую функцию в Python с помощью def  . Внутри функции используем условный оператор if  , чтобы задать ветвление. Если n < 4  , то F(n) = n  . Если n > 3  и n%3  = 0  , то F (n ) = n+ F (n− 1)⋅2  . Если n > 3  и n%3 = 1  , то F(n) = F(n∕∕2)+ F(n − 2)  . Если n > 3  и n%3 = 2  , то F (n ) = F(n − 1)+ n2  . Нужно вычислить F(55)  .

def F(n):
    # Базовый случай для n < 4
    if n < 4:
        return n
    # Если n делится на 3
    if n % 3 == 0:
        return n + F(n - 1) * 2
    # Если остаток 1
    if n % 3 == 1:
        return F(n // 2) + F(n - 2)
    # Если остаток 2
    if n % 3 == 2:
        return F(n - 1) + n ** 2

print(F(55))

Ответ: 45030

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

Задача 79#30450Максимум баллов за задание: 1

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

F (n) = 2∗ n∗n ∗n + n∗ n  , при n > 25

F (n) = F(n +1) +5 ∗F (n + 3)  , при n ≤ 25

Определите сумму цифр значения F(2).

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

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

В задаче задан рекурсивный алгоритм, при котором функция в процессе вычислений вызывает сама себя с другими аргументами. Для реализации создаём пользовательскую функцию в Python с помощью def  . Внутри функции используем условный оператор if  , чтобы задать ветвление. Если n > 25  , то F(n) = 2∗n ∗n ∗n + n∗ n  . Если n ≤ 25  , то F(n) = F(n+ 1)+ 5 ∗F(n + 3)  . Нужно вычислить F(2)  и найти сумму его цифр в десятичной записи.

def f(n):
    # Если n > 25, используем базовую формулу
    if n > 25:
        return 2 * n * n * n + n * n
    # Иначе считаем рекурсивно
    return f(n + 1) + 5 * f(n + 3)

s = f(2)
# Считаем сумму цифр числа
summa = 0
while s > 0:
    summa += s % 10
    s //= 10
print(summa)

# Иначе можно через map
print(sum(map(int, str(f(2)))))

Ответ: 54

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

Задача 80#30452Максимум баллов за задание: 1

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

F (n) = n  , при n < 12

F (n) = F(n∕∕2)∗ 2− F(n − 1)  , если n > 11  и остаток от деления n  на 2 равен 0

F (n) = − F (n − 1)  , если n > 11  и остаток от деления n  на 2 равен 1

Определите наименьшее значение n  из отрезка [1;1000]  , при котором сумма цифр значения F (n)  равна 10.

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

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

В задаче задан рекурсивный алгоритм, при котором функция в процессе вычислений вызывает сама себя с другими аргументами. Для реализации создаём пользовательскую функцию в Python с помощью def  . Внутри функции используем условный оператор if  , чтобы задать ветвление. Если n < 12  , то F(n) = n  . Если n > 11  и n%2 = 0  , то F (n ) = 2⋅F (n ∕∕2) − F(n− 1)  . Если n > 11  и n%2  = 1  , то F (n) = − F(n− 1)  . Нужно перебрать n  от 1  до 1000  , для каждого вычислить F (n )  , найти сумму его десятичных цифр и выбрать минимальное n  , для которого эта сумма равна 10  .

def f(n):
    # База для n < 12:
    if n < 12:
        return n
    # Чётный n:
    if n > 11 and n % 2 == 0:
        return f(n // 2) * 2 - f(n - 1)
    # Нечётный n:
    if n > 11 and n % 2 == 1:
        return -f(n - 1)

# Ищем минимальное n с суммой цифр равной 10
for i in range(1, 1000 + 1):
    s = abs(f(i))
    summa = 0
    while s > 0:
        # Прибавляем последнюю цифру
        summa += s % 10
        # "Убираем" ее из числа
        s //= 10
    # Если нашлось, то выводим и останавливаем
    if summa == 10:
        print(i)
        break

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