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

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

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

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

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

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

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

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

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

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

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

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

В задаче дан рекурсивный алгоритм: функция F(n) вызывает саму себя с другими аргументами (n - 2, n / 2 или n / 3). Реализуем этот алгоритм на Python, для этого создадим функцию def f(n). Внутри функции создадим ветвление: n < 3, n > 2 и n кратно 5, n > 2, n некратно 5. Для каждого случая будем возвращать описанное в условии выражение, таким образом и будет запущенна рекурсия. Однако важно учетсть, что при делении (n / 2 или n / 3) могут получаться дробные числа, а по условию n должно быть целым. Поэтому добавим проверку: если n не целое, вернём очень маленькое число (например, -999999999), чтобы оно не влияло на результат.

Затем, останется только запустить функцию f для n из отрезка [1; 300] и сосчитать количество таких n, при которых результат функции превышает   5
10  , для этого воспользуемся циклом for.

# Аргумент n - целое неотрицательное число по условию
def f(n):
    if int(n) != n or n < 0:  # Проверка на недопустимое значение n
        # Возвращаем отрицательное и огромное по модулю число,
        # которое не повлияет на вычисление 10**5
        return -9999999999

    # Базовый случай: n < 3
    if n < 3:
        return 2 * n * n + 2

    # Рекурсивный случай 1: n > 2 и кратно 5
    elif n > 2 and n % 5 == 0:
        return 2 * f(n - 2) + f(n / 2) + n

    # Рекурсивный случай 2: n > 2 и не кратно 5
    elif n > 2 and n % 5 != 0:
        return n * n + f(n - 2) + 1 + f(n / 3)

# Переменная-счётчик для ответа
ans = 0

# Перебор значений n из отрезка [1; 300]
for i in range(1, 301):
    if f(i) > 10 ** 5:  # Проверка значения функции
        ans += 1
print(ans)

Динамическое решение

Для использования метода динамического программирования создадим массив f, где f[n] хранит значение F(n). Реализуем программу, которая будет заполнять массив последовательно от n = 1 до n = 300, для этого организуем перебор от 1 дл 300 с помощью цикла for. Внутри цикла для каждого n проверяем условия и вычисляем f[n] на основе уже вычисленных значений.

При ветвлении по условиям из задачи важно также учесть два момента:

1. n делится на 2 (или 3 в завсимости от ветки) без остатка, так как n / 2 (или n / 3) должно быть целым.

2. f[n-2], f[n//2] и f[n//3] уже вычислены (не равны 0), некоторые значения могут оказаться невычисленными, если для их расчёта не выполнились условия в предыдущих шагах (например, n не делилось на нужное число или требуемые рекурсивные вызовы тоже остались невычисленными).

В конце остается просто подсчитать, сколько значений в массиве превышают 100000.

# Создаем список значений функции F(n), где индекс соответствует n.
# Изначально заполняем нулями (неопределенные значения).
f = [0] * (300 + 1) # Индексы от 0 до 300

# Заполняем массив f для n от 1 до 300.
for n in range(1, 300 + 1):
    # Базовый случай: n < 3
    if n < 3:
        f[n] = 2 * n * n + 2

    # Случай 1: n > 2 и кратно 5
    if n > 2 and n % 5 == 0:
        # Проверяем, что n делится на 2 без остатка (так как n/2 должно быть целым),
        # и что f[n-2] и f[n//2] уже вычислены (не равны 0).
        if (n % 2 == 0) and (f[n - 2] != 0) and (f[n // 2] != 0):
            f[n] = 2 * f[n - 2] + f[n // 2] + n

    # Случай 2: n > 2 и не кратно 5
    if n > 2 and n % 5 != 0:
        # Проверяем, что n делится на 3 без остатка (так как n/3 должно быть целым),
        # и что f[n-2] и f[n//3] уже вычислены (не равны 0).
        if (n % 3 == 0) and (f[n - 2] != 0) and (f[n // 3] != 0):
            f[n] = n * n + f[n - 2] + 1 + f[n // 3]

# Счётчик для ответа
ans = 0
# Перебираем n для проверки итоговых значений функции
for n in range(1, 300 + 1):
    if f[n] > 10 ** 5:
        ans += 1

print(ans)

Ответ: 0

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

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

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

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

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

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

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

В задаче дан рекурсивный алгоритм вычисления функции F (n)  , где для первых трёх значений аргумента заданы конкретные результаты, а для всех n > 3  используется рекурсивная формула. Реализуем этот алгоритм на Python. Для этого создаём функцию f(n )  , внутри которой сначала проверяем, относится ли n  к базовым случаям: при n = 1  возвращаем 0  , при n = 2  или n = 3  — возвращаем 1  . Эти условия позволяют остановить рекурсию и сразу вернуть ответ для небольших значений аргумента. Если n > 3  , используем формулу f(n) = f(n − 1)+ n2 + f(n− 2)  , где вычисляем рекурсивно значения для n − 1  и n − 2  , а также добавляем квадрат текущего аргумента n2  . Таким образом, на каждом шаге функция делится на более простые подзадачи, пока не достигнет одного из базовых случаев, после чего происходит сворачивание рекурсии с суммированием результатов. После описания алгоритма выполняем вызов f(25)  , чтобы получить требуемое значение.

def f(n):
    # Если n = 1, базовый случай: возвращаем 0
    if n == 1:
        return 0

    # Если n = 2 или n = 3, второй и третий базовые случаи: возвращаем 1
    elif n == 2 or n == 3:
        return 1

    # Если n > 3, используем рекурсивную формулу
    else:
        # Вычисляем f(n-1) и f(n-2) рекурсивно и прибавляем квадрат n
        return f(n - 1) + n ** 2 + f(n - 2)

# Запускаем алгоритм для n = 25 и выводим результат
print(f(25))


Ответ: 1705479

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

Задача 43#22209Максимум баллов за задание: 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(33)  ?

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

В задаче задан рекурсивный алгоритм вычисления функции F (n)  , где для трёх первых значений аргумента n = 1,2,3  результат равен 1  , а для остальных случаев выбор формулы зависит от чётности n  . Реализуем этот алгоритм на Python, создав функцию f (n)  . Сначала проверяем базовый случай: если n  входит в список [1,2,3]  , возвращаем 1  . Если n > 3  и число чётное, то используем формулу f(n) = f (n − 1)+ f(n− 3)+ f(n∕∕3)  — то есть вычисляем значения для n− 1  , n− 3  и n  , делённого на 3  с целочисленным результатом, а затем складываем их. Если n > 3  и число нечётное, то используем формулу f(n) = f(n − 2)+ f(n− 1)  , что означает суммирование результатов рекурсивных вызовов для n − 2  и n − 1  . Рекурсия продолжается до тех пор, пока аргумент не достигнет одного из базовых значений 1  , 2  или 3  , после чего начинает сворачиваться, возвращая суммарный результат. В завершение вызываем f(33)  , чтобы вычислить требуемое значение.

def f(n):
    # Базовый случай: если n равно 1, 2 или 3, возвращаем 1
    if n in [1, 2, 3]:
        return 1

    # Если n > 3 и число чётное, используем формулу:
    # f(n) = f(n-1) + f(n-3) + f(n // 3)
    elif n > 3 and n % 2 == 0:
        return f(n - 1) + f(n - 3) + f(n // 3)

    # Если n > 3 и число нечётное, используем формулу:
    # f(n) = f(n-2) + f(n-1)
    elif n > 3 and n % 2 != 0:
        return f(n - 2) + f(n - 1)

# Вызываем функцию для n = 33 и выводим результат
print(f(33))

Ответ: 1022292

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

Задача 44#22210Максимум баллов за задание: 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) +2 ∗n + 1+ F(n∕3)  , если n > 3  и нечетно

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

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

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

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

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

    # Случай: n > 3 и чётное
    elif n > 3 and n % 2 == 0:
        return 2 * f(n - 1) + f(n // 2)

    # Случай: n > 3 и нечётное
    elif n > 2 and n % 2 != 0:
        return f(n - 2) + 2 * n + 1 + f(n // 3)

print(f(128))

Ответ: 158450

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

Задача 45#22665Максимум баллов за задание: 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(77)  ?

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

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

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

def f(n):
    # Базовый случай: если n < 2, считаем по формуле 3*n + n̂2
    if n < 2:
        return 3 * n + n ** 2

    # Если n > 1 и чётное: используем формулу f(n-2) + f(n//2)
    elif n > 1 and n % 2 == 0:
        return f(n - 2) + f(n // 2)

    # Если n > 1 и нечётное: используем формулу f(n-2) + f(n-3)
    elif n > 1 and n % 2 == 1:
        return f(n - 2) + f(n - 3)

print(f(77))

Ответ: 125128

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

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

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

F (n) = n− 7,  при n > 15

F (n) = 2⋅F (n + 6)+ n− 4,  при n ≤ 15

Чему равно значение функции F(1)?

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

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

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

def F(n):
    # Если n > 15, возвращаем n - 7
    if n > 15:
        return n - 7

    # Если n <= 15, рекурсивно вызываем F(n+6) и считаем по формуле
    if n <= 15:
        return 2 * F(n + 6) + n - 4

print(F(1))

Ответ: 135

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

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

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

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

F (n) = 5⋅F (n − 1)+ 2⋅F (n − 2),  при n ≥ 5

Чему равно значение функции F(10)?

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

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

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

def f(n):
    # Базовый случай: если n < 5, возвращаем n
    if n < 5:
        return n

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

print(f(10))

Ответ: 115042

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

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

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

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

F (n) = F(n − 2) +5 ⋅F(n − 3),  при n ≥ 3

Чему равно значение функции F(15)?

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

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

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

def f(n):
    # Базовый случай: n < 3
    if n < 3:
        return 3 * n
    # Рекурсивный случай: n >= 3
    else:
        return f(n - 2) + 5 * f(n - 3)

print(f(15))

Ответ: 18183

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

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

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

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

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

Чему равно значение величины F (5)  ?

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

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

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

def F(n):
    # Базовый случай: n <= 2
    if n <= 2:
        return 1
    # Рекурсивный случай: n > 2
    if n > 2:
        return 2 * F(n - 1) + F(n - 2)

print(F(5))

Ответ: 17

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

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

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

F (1) = 1;

F (n) = n⋅F (n− 1),при четном n > 1

F (n) = n+ F (n − 2),п ри нечетном n > 1

Определите значение F (90)  .

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

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

В задаче задан рекурсивный алгоритм, при котором функция в процессе вычислений вызывает сама себя с другими аргументами. Для реализации создаём пользовательскую функцию в Python с помощью def  . Внутри функции используем условный оператор if  , чтобы задать ветвление:

1) Базовый случай: F(1) = 1  .

2) Если n > 1  и n  чётное, то F (n) = n⋅F (n − 1)  .

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

Необходимо вычислить F (90)  , начиная с n = 90  и рекурсивно спускаясь до базового случая, применяя соответствующее правило для чётных и нечётных n  .

def F(n):
    # Базовый случай: при n = 1
    if n == 1:
        return 1
    # Чётное n > 1: умножаем n на значение функции от (n - 1)
    if n > 1 and n % 2 == 0:
        return n * F(n - 1)
    # Нечётное n > 1: складываем n и значение функции от (n - 2)
    if n > 1 and n % 2 == 1:
        return n + F(n - 2)

print(F(90))

Ответ: 182250

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

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

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

F (0) = 0;

F (n) = F(n∕2),  если n > 0  и при этом n  чётно;

F (n) = 1+ F (n − 1),  если n  нечётно.

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

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

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

В задаче задан рекурсивный алгоритм, при котором функция в процессе вычислений вызывает сама себя с другими аргументами. Для реализации создаём пользовательскую функцию в Python с помощью def  . Внутри функции используем условный оператор if  , чтобы задать ветвление:

1) F (0) = 0

2) F (n) = F (n∕2)  , если n > 0  и n  чётное

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

Необходимо найти минимальное n  , для которого F(n) = 12  . Для этого перебираем значения n  от 0 вверх, вычисляем F (n)  по определению, и при первом совпадении с 12 выводим найденное n  и останавливаем перебор.

def F(n):
    # База: F(0) = 0
    if n == 0:
        return 0
    # Чётный n > 0: F(n) = F(n // 2)
    if n > 0 and n % 2 == 0:
        return F(n // 2)
    # Нечётный n: F(n) = 1 + F(n - 1)
    if n % 2 == 1:
        return 1 + F(n - 1)

# Перебор для поиска минимального n, где F(n) == 12
for i in range(5000):
    if F(i) == 12:
        # Выводим минимальное найденное n и останавливаемся
        print(i)
        break

Ответ: 4095

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

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

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

F (0) = 1;

F (n) = F(0)+ F ((n − 1)∕3)+ F (n − (n− 1)∕3− 1);

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

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

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

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

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

# Ищем минимальное n с F(n) == 1001
# Можно брать диапозон и больше, т.к. делаем выход при нахождении
for n in range(1, 1000):
    if f(n) == 1001:
        print(n)   # Выводим значение и выходим
        break

Ответ: 500

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

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

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

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

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

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

F (n) = n⋅n + 3⋅n + 5  , при n > 30;

F (n) = 2⋅F (n + 1)+ F(n + 4)  , при чётных n ≤ 30;

F (n) = F(n +2) +3 ⋅F(n + 5)  , при нечётных n ≤ 30.

Определите количество натуральных значений n  из отрезка [1;1000]  , для которых значение F(n)  содержит не менее двух значащих цифр 0  (в любых разрядах).

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

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

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

def f(n):
    # Ветка 1: n > 30
    if n > 30:
        return n * n + 3 * n + 5

    # Ветка 2: n <= 30 и n нечётное
    if n % 2 != 0:
        return 2 * f(n + 1) + f(n + 4)

    # Ветка 3: n <= 30 и n чётное
    return f(n + 2) + 3 * f(n + 5)

# Счётчик подходящих n
c = 0
for i in range(1, 1001):
    # Преобразуем значение f(i) в строку
    # и считаем количество нулей
    if str(f(i)).count("0") >= 2:
        c += 1

print(c)

Ответ: 77

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

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

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

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

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

F (n) = − F (n − 1)  , для остальных случаев.

Чему равно значение функции F(14)?

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

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

В задаче задан рекурсивный алгоритм, при котором функция в процессе вычислений вызывает сама себя с другими аргументами. Для реализации создаём пользовательскую функцию в Python с помощью def  . Внутри функции используем условный оператор if  , чтобы задать ветвление: при n < − 1000  возвращаем 1; при n > 1  считаем F (n ) = − F (n− 1)− F (n − 3)  ; во всех остальных случаях (то есть − 1000 ≤ n ≤ 1  ): F (n) = − F (n − 1)  . Реализуем рекурсивно, а чтобы стек не переполнился из-за длинной цепочки вызовов, увеличим лимит глубины рекурсии через sys.setrecursionlimit  . Затем вычислим F (14)  вызовом функции.

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

def F(n):
    # База: если n < -1000
    if n < -1000:
        return 1

    # Ветка: если n > 1
    if n > 1:
        return -F(n - 1) - F(n - 3)

    # Иначе (для -1000 <= n <= 1)
    return -F(n - 1)

print(F(14))

Ответ: -189

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

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

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

 

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

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

Чему равно значение функции F(6)?

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

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

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

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

print(F(6))

Ответ: 44

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

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

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

F (1) = 1;

F (n) = 2n⋅F (n − 1), при четном n > 1

F (n) = n+ F (n − 2), при нечетном n > 1

Определите значение F (50)  .

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

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

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

def f(n):
    # Базовый случай: F(1) = 1
    if n == 1:
        return 1

    # Ветка для чётных n > 1: F(n) = 2*n * F(n-1)
    if n % 2 == 0 and n > 1:
        return 2 * n * f(n - 1)

    # Ветка для нечётных n > 1: F(n) = n + F(n-2)
    if n > 1 and n % 2 != 0:
        return n + f(n - 2)

print(f(50))

Ответ: 62500

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

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

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

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

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

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

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

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

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

def f(n):
    # База 1: F(1) = 0
    if n == 1:
        return 0
    # База 2: F(2) = 1, F(3) = 1
    if n in [2, 3]:
        return 1
    else:
        # Рекуррентная формула: F(n) = F(n-1) + F(n-2)
        return f(n - 1) + f(n - 2)

print(f(11))

Ответ: 55

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

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

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

F (1) = 1

F (n) = F(n − 1) +2 ∗n,n > 1

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

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

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

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

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

print(f(33))

Ответ: 1121

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

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

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

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

F (n) = n+ F (n ∕2)⋅2  , если n > 5  и остаток от деления n  на 2  равен 0

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

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

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

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

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

def f(n):
    # База: n < 6
    if n < 6:
        return n
    # Чётный n > 5
    if n % 2 == 0:
        return n + f(n // 2) * 2
    # Нечётный n > 5
    return f(n - 2) + f(n - 1)

# Поиск минимального n с суммой цифр F(n) равной 22
for i in range(1, 1001):
    if sum(map(int, str(f(i)))) == 22:
        print(i)
        break

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