В программировании рекурсия, или же рекурсивная функция — это такая функция, которая вызывает саму себя.
Рекурсивные функции с возвращаемыми значениями
Задание 6 (ИНФ-11 ЕГЭ 2023_ДЕМО)
Алгоритм вычисления значения функции F(n), где n – натуральное число,
задан следующими соотношениями:
F(n) = 1 при n = 1;
F(n) = n × F(n − 1), если n > 1.
Чему равно значение выражения F(2023) / F(2020)?
Вариант программы 1
Это может быть исправлено, увеличивая предел рекурсиона в Python, ниже – фрагмент о том, как вы можете увеличить предел рекурсии.
import sys
sys.setrecursionlimit(2030)
Вариант программы 2
Алгоритмы, опирающиеся на несколько предыдущих значений
Задание 6 (Решу ЕГЭ)
Последовательность чисел Падована задается рекуррентным соотношением:
F(1) = 1
F(2) = 1
F(3) = 1
F(n) = F(n–3) + F(n–2), при n >3, где n – натуральное число.
Чему равно двенадцатое число в последовательности Падована?
В ответе запишите только натуральное число.
Задание 6 (Решу ЕГЭ)
Алгоритм вычисления значения функции F(n), где n — натуральное число, задан следующими соотношениями:
F(1) = 1;
F(n) = n + F(n − 2), если n — нечётно, и n > 1;
F(n) = n × F(n − 1), если n — чётно.
Чему равно значение функции F(60)?
Алгоритмы, опирающиеся на несколько предыдущих значений
Задание 6 (Решу ЕГЭ)
Алгоритм вычисления значения функции F(n) и G(n), где n – натуральное число, задан следующими соотношениями:
F(1) = 0
F(n) = F(n–1) + n, при n >1
G(1) = 1
G(n) = G(n–1) * n, при n >1
Чему равно значение функции F(5) + G(5)?
В ответе запишите только натуральное число.
Сложные задачи
Задание 6 (Поляков ЕГЭ)
sqrt(n) запишем как n**0.5, что бы не подключать дополнительный математический модуль из библиотеки
Задание 6 (Поляков ЕГЭ)
Определите, сколько символов * выведет эта процедура при вызове F(140):
Алгоритмы, опирающиеся на несколько предыдущих значений
Задание 6 (Поляков ЕГЭ)
F(n) = n!, если n ≥ 5000,
F(n) = 2 · F(n + 1) / (n + 1), если 1 ≤ n < 5000.
Чему равно значение выражения 1000 · F(7) / F(4)? Примечание.
Факториал числа n, который обозначается как n!, вычисляется по формуле n!=1·2·…·n.
# программный код
import math
num1 = math.sqrt(2) # вычисление корня квадратного из двух
Как можно заметить из примера выше, для вызова функции мы вынуждены указывать название модуля и символ точки. С другой стороны, если функции используются достаточно часто, то такой вызов (постоянное указание названия модуля и символа точки) может усложнить программу и сделать её менее читабельной. Для того, чтобы не указывать название модуля и символ точки при вызове функций, мы пишем следующий код:
# программный код
from math import *
Если нужно использовать только некоторые функции модуля, то мы можем импортировать только их следующим образом: from math import sqrt, ceil, factorial