16.01 Одна функция
Готовиться с нами - ЛЕГКО!
Ошибка.
Попробуйте повторить позже
Алгоритм вычисления значения функции где
– натуральное число, задан следующими
соотношениями:
при
Определите значение
Решение программой:
Функция определяется рекурсивно по 3 правилам: при
возвращаем 1, при
возвращаем 1, при
вычисляем как
. Для нахождения
напрямую вызовем функцию.
# Базовые случаи: F(0) = 1, F(1) = 1 — они задают начальные значения и останавливают рекурсию # Рекурсивное правило: f(n) определяется по формуле: f(n - 1) * f(n - 2) + f(n - 3) def f(n): # Определение функции, реализующей алгоритм из условия if n == 0: # Базовый случай — возвращаем значение без рекурсии return 1 # Возвращаем базовое значение elif n == 1: # Базовый случай — возвращаем значение без рекурсии return 1 # Возвращаем базовое значение elif n > 1: # Рекурсивный случай — возвращаем выражение с рекурсивным вызовом return f(n - 1) * f(n - 2) + f(n - 3) # Возвращаем значение рекурсивного выражения else: # В остальных случаях — возвращаем 0, т.к. по условию данные значения вычислить нельзя return 0 # Возвращаем 0 print(f(6)) # Выводим результат на экран
Решение руками:
Нам даны и
. Используем их и подставляем в формулу:
мы получили значение
от
должно быть натуральным числом,
следовательно
и будет ответом на задание.
Ошибка.
Попробуйте повторить позже
Алгоритм вычисления значения функции где
– натуральное число, задан следующими
соотношениями:
,при
Определите значение
Решение программой:
Функция определяется рекурсивно по 3 правилам: при
возвращаем 1, при
возвращаем 2, при
вычисляем как
. Для нахождения
напрямую вызовем функцию.
# Базовые случаи: F(0) = 1, F(1) = 2 — они задают начальные значения и останавливают рекурсию # Рекурсивное правило: f(n) определяется по формуле: f(n - 1) * f(n - 2) - f(n - 3) def f(n): # Определение функции, реализующей алгоритм из условия if n == 0: # Базовый случай — возвращаем значение без рекурсии return 1 # Возвращаем базовое значение elif n == 1: # Базовый случай — возвращаем значение без рекурсии return 2 # Возвращаем базовое значение elif n > 1: # Рекурсивный случай — возвращаем выражение с рекурсивным вызовом return f(n - 1) * f(n - 2) - f(n - 3) # Возвращаем значение рекурсивного выражения else: return 0 # В остальных случаях при ненатуральных n вернём 0 print(f(7)) # Выводим результат на экран
Решение руками:
Нам даны и
. Используем их и подставляем в формулу:
мы получили значение
от
должно быть натуральным числом,
Следовательно
и будет ответом на задание.
Ошибка.
Попробуйте повторить позже
Алгоритм вычисления значения функции где
– натуральное число, задан следующими
соотношениями:
при
Определите значение
Решение программой:
Функция определяется рекурсивно по 3 правилам: при
возвращаем 1, при
возвращаем 2, при
вычисляем как
. Для нахождения
напрямую вызовем функцию.
# Базовые случаи: F(0) = 1, F(1) = 2 — они задают начальные значения и останавливают рекурсию # Рекурсивное правило: f(n) определяется по формуле: f(n - 1) * f(n - 2) - f(n - 3) def f(n): # Определение функции, реализующей алгоритм из условия if n == 0: # Базовый случай — возвращаем значение без рекурсии return 1 # Возвращаем базовое значение elif n == 1: # Базовый случай — возвращаем значение без рекурсии return 2 # Возвращаем базовое значение elif n > 1: # Рекурсивный случай — возвращаем выражение с рекурсивным вызовом return f(n - 1) * f(n - 2) - f(n - 3) # Возвращаем значение рекурсивного выражения else: return 0 # В остальных случаях при ненатуральных n вернём 0 print(f(7)) # Выводим результат на экран
Решение руками:
Нам даны и
. Используем их и подставляем в формулу:
мы получили значение
от
должно быть
натуральным числом, следовательно
и будет ответом на задание.
Ошибка.
Попробуйте повторить позже
Алгоритм вычисления значения функции где
– натуральное число, задан следующими
соотношениями:
при
Определите значение
Решение программой:
Функция определяется рекурсивно по 3 правилам: при
возвращаем 2, при
возвращаем 3, при
вычисляем как
. Для нахождения
напрямую
вызовем функцию.
# Базовые случаи: F(1) = 2, F(2) = 3 — они задают начальные значения и останавливают рекурсию # Рекурсивное правило: f(n) определяется по формуле: f(n - 1) ** f(n - 2) def f(n): # Определение функции, реализующей алгоритм из условия if n == 1: # Базовый случай — возвращаем значение без рекурсии return 2 # Возвращаем базовое значение elif n == 2: # Базовый случай — возвращаем значение без рекурсии return 3 # Возвращаем базовое значение elif n > 2: # Рекурсивный случай — возвращаем выражение с рекурсивным вызовом return f(n - 1) ** f(n - 2) # Возвращаем значение рекурсивного выражения else: # В остальных случаях — возвращаем значение return 0 # Возвращаем базовое значение print(f(4)) # Выводим результат на экран
Решение руками:
Нам даны ,
, которые мы подставим в формулу:
пишем в ответ.
Ошибка.
Попробуйте повторить позже
Алгоритм вычисления значения функции где
– натуральное число, задан следующими
соотношениями:
при
Определите значение
Решение программой:
Функция определяется рекурсивно по 3 правилам: при
возвращаем 1, при
возвращаем 2, при
вычисляем как
. Для нахождения
напрямую
вызовем функцию.
# Базовые случаи: F(0) = 1, F(1) = 2 — они задают начальные значения и останавливают рекурсию # Рекурсивное правило: f(n) определяется по формуле: f(n - 1) ** f(n - 2) def f(n): # Определение функции, реализующей алгоритм из условия if n == 0: # Базовый случай — возвращаем значение без рекурсии return 1 # Возвращаем базовое значение elif n == 1: # Базовый случай — возвращаем значение без рекурсии return 2 # Возвращаем базовое значение elif n > 1: # Рекурсивный случай — возвращаем выражение с рекурсивным вызовом return f(n - 1) ** f(n - 2) # Возвращаем значение рекурсивного выражения else: # В остальных случаях — возвращаем значение return 0 # Возвращаем базовое значение print(f(5)) # Выводим результат на экран
Решение руками:
Над даны ,
. Подставим их в формулу:
пишем в ответ.
Ошибка.
Попробуйте повторить позже
Алгоритм вычисления значения функции где
– натуральное число, задан следующими
соотношениями:
при
.
Определите значение
Решение программой:
Функция определяется рекурсивно по 3 правилам: при
возвращаем 0, при
возвращаем 1, при
вычисляем как
. Для нахождения
напрямую вызовем функцию.
# Базовые случаи: F(0) = 0, F(1) = 1 — они задают начальные значения и останавливают рекурсию # Рекурсивное правило: f(n) определяется по формуле: f(n - 1) ** f(n - 3) + f(n - 2) def f(n): # Определение функции, реализующей алгоритм из условия if n == 0: # Базовый случай — возвращаем значение без рекурсии return 0 # Возвращаем базовое значение elif n == 1: # Базовый случай — возвращаем значение без рекурсии return 1 # Возвращаем базовое значение elif n > 1: # Рекурсивный случай — возвращаем выражение с рекурсивным вызовом return f(n - 1) ** f(n - 3) + f(n - 2) # Возвращаем значение рекурсивного выражения else: # В остальных случаях — возвращаем значение return 0 # Возвращаем базовое значение print(f(6)) # Выводим результат на экран
Решение руками:
Нам даны и
. Подставим их в формулу:
мы получили значение
от
должно быть натуральным
числом, следовательно
и будет ответом на вопрос задачи
Ошибка.
Попробуйте повторить позже
Алгоритм вычисления значения функции где
– натуральное число, задан следующими
соотношениями:
. При
.
Определите значение
Решение программой:
Функция определяется рекурсивно по 3 правилам: при
возвращаем 2, при
возвращаем 3, при
вычисляем как
. Для нахождения
напрямую вызовем функцию.
# Базовые случаи: F(-1) = 2, F(0) = 3 — они задают начальные значения и останавливают рекурсию # Рекурсивное правило: f(n) определяется по формуле: f(- 1) * f(n - 1) + 2 * f(n - 1) def f(n): # Определение функции, реализующей алгоритм из условия if n == -1: # Базовый случай — возвращаем значение без рекурсии return 2 # Возвращаем базовое значение elif n == 0: # Базовый случай — возвращаем значение без рекурсии return 3 # Возвращаем базовое значение elif n > 0: # Рекурсивный случай — возвращаем выражение с рекурсивным вызовом return f(- 1) * f(n - 1) + 2 * f(n - 1) # Возвращаем значение рекурсивного выражения print(f(5)) # Выводим результат на экран
Решение руками:
Нам даны ,
. Подставим их в формулу:
и пишем в ответ.
Ошибка.
Попробуйте повторить позже
Алгоритм вычисления значения функции где
– число, заданное следующими соотношениями:
. При
.
Определите значение
Решение программой:
Функция определяется рекурсивно по 3 правилам: при
возвращаем 4, при
возвращаем 1, при
вычисляем как
. Для нахождения
напрямую вызовем функцию.
# Базовые случаи: F(-1) = 4, F(0) = 1 — они задают начальные значения и останавливают рекурсию # Рекурсивное правило: f(n) определяется по формуле: f(- 1) * f(n - 1) + 2 * f(n - 1) def f(n): # Определение функции, реализующей алгоритм из условия if n == -1: # Базовый случай — возвращаем значение без рекурсии return 4 # Возвращаем базовое значение elif n == 0: # Базовый случай — возвращаем значение без рекурсии return 1 # Возвращаем базовое значение elif n > 0: # Рекурсивный случай — возвращаем выражение с рекурсивным вызовом return f(- 1) * f(n - 1) + 2 * f(n - 1) # Возвращаем значение рекурсивного выражения print(f(4)) # Выводим результат на экран
Решение руками:
Нам даны ,
. Подставим их в формулу:
и пишем в ответ.
Ошибка.
Попробуйте повторить позже
Алгоритм вычисления значения функции где
– натуральное число, задан следующими
соотношениями:
. При
.
Определите значение
Решение программой:
Функция определяется рекурсивно по 2 правилам: при
возвращаем 1, при
вычисляем как
. Для нахождения
напрямую вызовем
функцию.
# Базовые случаи: F(1) = 1 — они задают начальные значения и останавливают рекурсию # Рекурсивное правило: f(n) определяется по формуле: f(n - 1) ** (n - 1) + f(n - 1) def f(n): # Определение функции, реализующей алгоритм из условия if n == 1: # Базовый случай — возвращаем значение без рекурсии return 1 # Возвращаем базовое значение elif n > 1: # Рекурсивный случай — возвращаем выражение с рекурсивным вызовом return f(n - 1) ** (n - 1) + f(n - 1) # Возвращаем значение рекурсивного выражения print(f(4)) # Выводим результат на экран
Решение руками:
Нам дано . Подставим его значение в формулу:
и пишем в ответ.
Ошибка.
Попробуйте повторить позже
Алгоритм вычисления значения функции где
– целое неотрицательное число, задан
следующими соотношениями:
. При
.
Определите значение
Решение программой:
Функция определяется рекурсивно по 3 правилам: при
возвращаем 1, при
возвращаем 2, при
вычисляем как
. Для нахождения
напрямую
вызовем функцию.
# Базовые случаи: F(0) = 1, F(1) = 2 — они задают начальные значения и останавливают рекурсию # Рекурсивное правило: f(n) определяется по формуле: f(n - 1) * n + n + f(n - 2) def f(n): # Определение функции, реализующей алгоритм из условия if n == 0: # Базовый случай — возвращаем значение без рекурсии return 1 # Возвращаем базовое значение elif n == 1: # Базовый случай — возвращаем значение без рекурсии return 2 # Возвращаем базовое значение elif n > 1: # Рекурсивный случай — возвращаем выражение с рекурсивным вызовом return f(n - 1) * n + n + f(n - 2) # Возвращаем значение рекурсивного выражения print(f(5)) # Выводим результат на экран
Решение руками:
Нам даны ,
. Подставим их в формулу, чтобы получить ответ:
и будет ответом на вопрос задачи.
Ошибка.
Попробуйте повторить позже
Алгоритм вычисления значения функции , где
– целое число, заданное следующими
соотношениями
при
Определите значение
Решение программой:
Функция определяется рекурсивно по 4 правилам: при
возвращаем 0, при
возвращаем 1, при
возвращаем 1, при
вычисляем как
. Для
нахождения
напрямую вызовем функцию.
# Базовые случаи: F(-1) = 0, F(0) = 1, F(1) = 1 — они задают начальные значения и останавливают рекурсию # Рекурсивное правило: f(n) определяется по формуле: f(n - 1) * f(n - 2) + f(n - 3) def f(n): # Определение функции, реализующей алгоритм из условия if n == - 1: # Базовый случай — возвращаем значение без рекурсии return 0 # Возвращаем базовое значение if n == 0: # Базовый случай — возвращаем значение без рекурсии return 1 # Возвращаем базовое значение if n == 1: # Базовый случай — возвращаем значение без рекурсии return 1 # Возвращаем базовое значение return f(n - 1) * f(n - 2) + f(n - 3) # Возвращаем значение рекурсивного выражения print(f(6)) # Выводим результат на экран
Решение 2
Нам даны
и
. Подставим их в формулу:
и будет ответом на задание.
Ошибка.
Попробуйте повторить позже
Алгоритм вычисления значения функции , где
— целое неотрицательное число, задан следующими
соотношениями:
,
,
,при
Чему будет равно значение, вычисленное при выполнении вызова ?
Решение программой:
Функция определяется рекурсивно по 3 правилам: при
возвращаем 0, при
возвращаем 1, при
вычисляем как
. Для нахождения
напрямую вызовем функцию.
# Базовые случаи: F(1) = 0, для n < 4 возвращается 1 — они задают начальные значения и останавливают рекурсию # Рекурсивное правило: f(n) определяется по формуле: f(n - 1) + n ** 2 + f(n - 2) def f(n): # Определение функции, реализующей алгоритм из условия if n == 1: # Базовый случай — возвращаем значение без рекурсии return 0 # Возвращаем базовое значение if n < 4: # Базовый случай — возвращаем значение без рекурсии return 1 # Возвращаем базовое значение return f(n - 1) + n ** 2 + f(n - 2) # Возвращаем значение рекурсивного выражения print(f(25)) # Выводим результат на экран
Ошибка.
Попробуйте повторить позже
Алгоритм вычисления значения функции , где
— целое неотрицательное число, а «/» - целочисленное деление,
задан следующими соотношениями:
,
,
, если
и четно
, если
и нечетно
Чему будет равно значение, вычисленное при выполнении вызова ?
Решение программой:
Функция определяется рекурсивно по 4 правилам: при
возвращаем 1, при
возвращаем 1, при
возвращаем 1, при
вычисляем как
. Для нахождения
напрямую
вызовем функцию.
# Базовые случаи: F(1) = 1, F(2) = 1, F(3) = 1 — они задают начальные значения и останавливают рекурсию # Рекурсивное правило: f(n) определяется по формуле: f(n - 1) + f(n - 3) + f(n // 3) def f(n): # Определение функции, реализующей алгоритм из условия if n == 1: # Базовый случай — возвращаем значение без рекурсии return 1 # Возвращаем базовое значение elif n == 2: # Базовый случай — возвращаем значение без рекурсии return 1 # Возвращаем базовое значение elif n == 3: # Базовый случай — возвращаем значение без рекурсии return 1 # Возвращаем базовое значение elif n > 3 and n % 2 == 0: # Рекурсивный случай — возвращаем выражение с рекурсивным вызовом return f(n - 1) + f(n - 3) + f(n // 3) # Возвращаем значение рекурсивного выражения elif n > 3 and n % 2 != 0: # Рекурсивный случай — возвращаем выражение с рекурсивным вызовом return f(n - 2) + f(n - 1) # Возвращаем значение рекурсивного выражения print(f(33)) # Выводим результат на экран
Ошибка.
Попробуйте повторить позже
Алгоритм вычисления значения функции , где
— целое неотрицательное число, а «//» - целочисленное деление,
задан следующими соотношениями:
, при
, если
и четно
, если
и нечетно
Чему будет равно значение, вычисленное при выполнении вызова ?
Решение программой:
Функция определяется рекурсивно по 2 правилам: при
возвращаем 2 ** n, при
вычисляем как
. Для нахождения
напрямую вызовем функцию.
# Базовые случаи: для n < 4 возвращается 2 ** n — они задают начальные значения и останавливают рекурсию # Рекурсивное правило: f(n) определяется по формуле: 2 * f(n - 1) + f(n // 2) def f (n): # Определение функции, реализующей алгоритм из условия if n < 4: # Базовый случай — возвращаем значение без рекурсии return 2 ** n # Возвращаем базовое значение if n % 2 == 0: # Рекурсивный случай — возвращаем выражение с рекурсивным вызовом return 2 * f(n - 1) + f(n // 2) # Возвращаем значение рекурсивного выражения return f(n - 2) + 2 * n + 1 + f(n // 3) # Возвращаем значение рекурсивного выражения print(f(128)) # Выводим результат на экран
Ошибка.
Попробуйте повторить позже
Алгоритм вычисления значения функции , где
— целое неотрицательное число, задан следующими
соотношениями:
, при
, если
и кратно 5
, если
и некратно 5
Сколько четных цифр содержит результат выполнения вызова ?
Решение программой:
Определяем рекурсивную функцию по заданным соотношениям. Если
, возвращаем
. Если
и
делится на
, вызываем функцию для
и
, умножаем первый результат на
, прибавляем
второй и прибавляем
. Если
и
не делится на
, вычисляем
, прибавляем результат вызова
,
прибавляем
и результат вызова
. После определения функции вызываем
, сохраняем результат в
переменной
, затем преобразуем
в строку, проходим по каждой цифре, проверяем остаток от деления на
и
подсчитываем количество чётных цифр.
def f(n): # Базовый случай: если n меньше 3, возвращаем 2*n*n + 2 if n < 3: return 2 * n * n + 2 # Если n больше 2 и делится на 5, вычисляем 2*f(n-2) + f(n//2) + n elif n > 2 and n % 5 == 0: return 2 * f(n - 2) + f(n // 2) + n # Если n больше 2 и не делится на 5, вычисляем 2*n*n + f(n-2) + 1 + f(n//3) elif n > 2 and n % 5 != 0: return 2 * n * n + f(n - 2) + 1 + f(n // 3) # Вызываем функцию f для n = 100 и сохраняем результат в переменной s s = f(100) # Преобразуем s в строку, проходим по каждой цифре, проверяем остаток от деления на 2 и подсчитываем количество чётных цифр print(len([i for i in str(s) if int(i) % 2 == 0]))
Ошибка.
Попробуйте повторить позже
Алгоритм вычисления значения функции , где
— целое неотрицательное число, задан следующими
соотношениями:
, при
, если
и кратно 3
, если
и некратно 3
Чему равна сумма четных цифр числа, полученного при выполнении вызова ?
Решение программой:
Определяем рекурсивную функцию по заданным условиям. Если
, возвращаем
. Если
и
делится на
, вызываем функцию для
и
, удваиваем первый результат, прибавляем второй и добавляем
.
Если
и
не делится на
, вычисляем
, прибавляем результат вызова
и результат вызова
. После определения функции вызываем
и сохраняем результат в переменной
. Затем проходим по
каждой цифре числа
, проверяем остаток от деления на
и суммируем все чётные цифры в переменной
, после
чего выводим
.
def f(n): # Базовый случай: если n меньше 6, возвращаем 2*n + 1 if n < 6: return 2 * n + 1 # Если n больше 5 и делится на 3, вычисляем 2*f(n-1) + f(n//2) + n elif n > 5 and n % 3 == 0: return 2 * f(n - 1) + f(n // 2) + n # Если n больше 5 и не делится на 3, вычисляем 2*n*n + f(n-1) + f(n//2) elif n > 5 and n % 3 != 0: return 2 * n * n + f(n - 1) + f(n // 2) # Вызываем функцию f для n = 99 и сохраняем результат в переменной s s = f(99) # Инициализируем переменную для хранения суммы чётных цифр ans = 0 # Проходим по каждой цифре числа s while s > 0: # Если цифра чётная, прибавляем её к ans ans += (s % 10) * ((s % 10) % 2 == 0) # Убираем последнюю цифру из s s = s // 10 # Выводим сумму чётных цифр print(ans)
Ошибка.
Попробуйте повторить позже
Алгоритм вычисления значения функции , где
— целое неотрицательное число, задан следующими
соотношениями:
, при
, при
Определите количество натуральных значений из отрезка
, при которых значение
кратно
4.
Решение программой:
Определяем рекурсивную функцию по заданным условиям. Если
, возвращаем
. Если
,
вызываем функцию для
и
, удваиваем второй результат, прибавляем первый и возвращаем сумму. После
определения функции проходим по всем натуральным значениям
из отрезка
, вызываем
для каждого
и проверяем, делится ли результат на
. Если результат делится на
, увеличиваем счётчик
. После проверки всех
выводим значение
.
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) else: return f(n + 2) + 2 * f(n + 1) # Инициализируем счётчик количества значений n, для которых f(n) кратно 4 ans = 0 # Проходим по всем натуральным n от 1 до 1000 включительно for i in range(1, 1000 + 1): # Если значение функции f(i) кратно 4, увеличиваем счётчик if f(i) % 4 == 0: ans += 1 # Выводим количество таких значений print(ans)
Ошибка.
Попробуйте повторить позже
Алгоритм вычисления значения функции , где
— целое неотрицательное число, задан следующими
соотношениями:
, при
, при
Определите количество натуральных значений из отрезка
, при которых значение
заканчивается на
3.
Решение программой:
Определяем рекурсивную функцию по заданным условиям. Если
, возвращаем
. Если
,
вызываем функцию для
и для
, умножаем второй результат на
, прибавляем первый и возвращаем сумму.
После определения функции проходим по всем натуральным значениям
из отрезка
, вызываем
для каждого
и проверяем, оканчивается ли результат на
, то есть проверяем
.
Если последняя цифра равна
, увеличиваем счётчик
. После проверки всех
выводим значение
.
def f(n): # Если n больше 32, возвращаем n**3 if n > 32: return n ** 3 # Если n меньше или равно 32, вычисляем f(n*2) + f(n+1)*n else: return f(n * 2) + f(n + 1) * n # Инициализируем счётчик количества значений n, для которых f(n) оканчивается на 3 ans = 0 # Проходим по всем натуральным n от 1 до 1000 включительно for i in range(1, 1000 + 1): # Если последняя цифра f(i) равна 3, увеличиваем счётчик if f(i) % 10 == 3: ans += 1 # Выводим количество таких значений print(ans)
Ошибка.
Попробуйте повторить позже
Алгоритм вычисления значения функции , где
— целое неотрицательное число, а «/» — целочисленное деление,
задан следующими соотношениями:
, если
, если
и четно
, если
и нечетно
Чему будет равно значение, вычисленное при выполнении вызова ?
Решение программой:
Определяем рекурсивную функцию по заданным условиям. Если
, сразу возвращаем значение
.
Если
и число чётное, вызываем функцию для
и для
, после чего складываем результаты и возвращаем
сумму. Если
и число нечётное, вызываем функцию для
и для
, складываем результаты и возвращаем
сумму. Таким образом, мы последовательно проверяем базовый случай и различаем чётные и нечётные значения
, чтобы
корректно применять соответствующие формулы. После определения функции вызываем
для получения
ответа.
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) # Вызываем функцию f для n = 77 и выводим результат print(f(77))
Ошибка.
Попробуйте повторить позже
Алгоритм вычисления значения функции , где
— целое неотрицательное число, задан следующими
соотношениями:
, при
, если
и кратно 3
, если
и некратно 3
Определите наименьшее такое из отрезка
, при котором значение
заканчивается на
8.
Решение программой:
Определяем рекурсивную функцию по заданным формулам. Для
сразу возвращаем значение
,
так как это базовый случай, при котором вычисление не зависит от других значений функции. Если
и число кратно
3, мы вызываем
и
, затем умножаем
на 3, прибавляем
и добавляем
. Если
и
число некратно 3, мы вызываем
и
, прибавляем
к
и
. После определения
функции мы перебираем все
от 1 до 1000 и проверяем остаток от деления
на 10, чтобы найти наименьшее
, при
котором значение функции заканчивается на 8. Как только такое
найдено, выводим его и прерываем цикл, чтобы
получить минимальное решение.
def f(n): # Базовый случай: если n < 6, считаем по формуле 2*n + 1 if n < 6: return 2 * n + 1 # Если n > 5 и кратно 3: используем формулу 3*f(n-1) + f(n//2) + n elif n > 5 and n % 3 == 0: return 3 * f(n - 1) + f(n // 2) + n # Если n > 5 и некратно 3: используем формулу 5*n*n + f(n-1) + f(n//2) elif n > 5 and n % 3 != 0: return 5 * n * n + f(n - 1) + f(n // 2) # Перебираем все значения n от 1 до 1000 for i in range(1, 1000 + 1): # Проверяем, оканчивается ли f(i) на 8 if f(i) % 10 == 8: print(i) # Выводим наименьшее n break # Прерываем цикл после нахождения первого подходящего n