Рекурсия
Функция
Синтаксис
return
Функция без return
Сравнение
Рекурсия
Пример 1
Задача 1
Задача 1
Порядок выполнения
Порядок выполнения
Задача 2
Глубина рекурсии
Задача 2
Задача 3
Мемоизация
Прогрев кэша
Задача 3
Задача 4
Задача 5
Задача 6
Задача 7
Задача 8
Задача 9
Задача 10
Задача 11
Задача 12
Задача 13
Задача 14
Задача 15
Задача 16
Задача 17
Задача 18
Задача 19
Задача 20
Задача 21
Задача 22
Задача 23
Задача 24
Задача 25
Задача 26
Задача 27
Ответы
Ответы
120.06K
Category: programmingprogramming

Занятие 3.1 Рекурсия

1. Рекурсия

2. Функция

• Функция — это мини-программа внутри вашей
программы. Это именованный блок кода, который
выполняет определенную задачу.
• Зачем они нужны?
• 1. Избежать повторов. Если вам нужно 10 раз посчитать
площадь треугольника, лучше 1 раз написать функцию,
чем 10 раз копировать формулу.
• 2. Разделение задач. Проще искать ошибки, когда код
разбит на логические куски.

3. Синтаксис

• def имя_функции(параметры):
# Тело функции
# Код, который что-то делает

4. return


Возврат результата из функции.
def calc_sum(a, b):
result = a + b
return result # ВЕРНУЛИ результат в программу
# Мы можем сохранить результат в переменную
x = calc_sum(5, 10)
# И использовать его дальше
final = x * 2
print(final) # Выведет 30
• Правило: В месте вызова функции код как бы заменяется на то, что
вернул return.
• x = calc_sum(5, 10) превращается компьютером в x = 15.

5. Функция без return

• def say_hello(a, b):
result = a + b
print(result) # ПРОСТО ПОКАЗАЛИ на экране
• # Попытка сохранить результат
• x = say_hello(5, 10) # На экране появится 15
• # Но что внутри x?
• print(x) # Выведет None
• В Python, если в функции нет return, она неявно
возвращает специальное значение None (пустоту).
Математику с None делать нельзя.

6. Сравнение

7. Рекурсия

• Рекурсия — это когда функция вызывает сама себя.
• Чтобы рекурсия не была бесконечной (как while True), у
неё должны быть две части:
• 1. Базовый случай (Условие остановки): Ситуация, когда
функция выдает готовый ответ без новых вызовов
(например, if n == 0: return 0).
• 2. Рекурсивный шаг: Вызов функции с измененным
аргументом, приближающим нас к базовому случаю
(например, return n + F(n-1)).

8. Пример 1

• Задача:
• F(n) = 1, при n = 1
• F(n) = n + F(n-1), при n > 1
• Чему равно F(5)?
• def F(n):
if n == 1:
return 1
if n > 1:
return n + F(n - 1)
• print(F(5))

9. Задача 1

• Алгоритм вычисления значения функции F(n), где n –
натуральное число, задан следующими
соотношениями:
• F(n) = 1 при n < 3;
• F(n) = F(n − 2) − F(n − 1), если n > 2 и при этом n
чётно;
• F(n) = 2 × F(n − 1) − F(n − 2), если n > 2 и при этом n
нечётно.
• Чему равно значение функции F(15)?

10. Задача 1

• def f(n):
if n<3: return 1
elif n%2==0: return f(n-2) - f(n-1)
return 2*f(n-1) - f(n-2)
• print(f(15))

11. Порядок выполнения

• def F(n):
print(f"Спуск: я зашел в F({n})") # Действие ДО вызова (Прямой ход)
if n == 1:
print("ДНО! Базовый случай")
return 1
# Рекурсивный вызов
res = F(n - 1)
print(f"Подъем: я вернулся в F({n}), мне принесли результат {res}") #
ПОСЛЕ вызова (Обратный ход)
return n + res # Возвращаем результат еще выше
• print("Ответ:", F(3))

12. Порядок выполнения

• def G(n):
if n >= 1:
G(n-1)
print(n)
• Что выведет G(3)?

13. Задача 2

• Алгоритм вычисления значения функции F(n), где n –
натуральное число, задан
• следующими соотношениями:
• F(n) = 1 при n = 1;
• F(n) = n + F(n − 1), если n > 1.
• Чему равно значение выражения F(2023) – F(2020)?

14. Глубина рекурсии

• По умолчанию Python по умолчанию ограничивает
глубину рекурсии (~1000 вызовов).
• Для увеличения глубины рекурсии можно использовать:
• import sys
• sys.setrecursionlimit(...)

15. Задача 2

• import sys
• sys.setrecursionlimit(3000)
• def f(n):
if n==1: return 1
return n + f(n-1)
• print(f(2023) - f(2020))

16. Задача 3

• Условие:
• Алгоритм вычисления функции F(n) задан
соотношениями:
• F(n) = 1, при n <=2
• F(n) = F(n-1) + F(n-2), при n > 2
• Чему равно значение функции F(2024)?

17. Мемоизация

• Мы считаем одно и то же миллионы раз.
• Чтобы найти F(5), мы считаем F(4) и F(3).
• Чтобы найти F(4), мы снова считаем F(3) и F(2).
• В итоге F(3) считается для каждого родителя заново.
Дерево вызовов растет в ширину очень быстро.
• Чтобы не считать одно и тоже, нужно позволить функции
запоминать уже рассчитанные значения. Для этого нужно
добавить в начале кода следующее:
• from functools import lru_cache
• @lru_cache(None)

18. Прогрев кэша

• Перед решением основной задачи пишем:
• for i in range(1, 2025):
F(i)
• Благодаря циклу for, рекурсия никогда не углубляется
больше чем на 1 шаг. В процессе мы постепенно
заполняем кэш.

19. Задача 3

• from functools import lru_cache
• @lru_cache(None)
• def F(n):
if n <= 2:
return 1
return F(n - 1) + F(n - 2)
• for i in range(1, 2025):
F(i)
• print(F(2024))

20. Задача 4

• Алгоритм вычисления значения функции F(n), где n –
натуральное число, задан следующими
соотношениями:
• F(n) = 6 при n < 7;
• F(n) = n + F(n − 1), если n ≥ 7.
• Чему равно значение выражения F(2023) – F(2021)?

21. Задача 5

• Алгоритм вычисления значения функции F(n), где n –
натуральное число, задан следующими
соотношениями:
• F(n) = 10 при n < 11;
• F(n) = n + F(n − 1), если n ≥ 11.
• Чему равно значение выражения F(2024) – F(2021)?

22. Задача 6

• Алгоритм вычисления значения функции F(n), где n –
натуральное число, задан следующими
соотношениями:
• F(n) = 1 при n < 3;
• F(n) = F(n − 2) − F(n − 1), если n > 2 и при этом n
чётно;
• F(n) = 2 × F(n − 1) − F(n − 2), если n > 2 и при этом n
нечётно.
• Чему равно значение функции F(31)?

23. Задача 7

• Алгоритм вычисления значения функции F(n), где n –
натуральное число, задан следующими
соотношениями:
• F(n) = 3 при n < 3;
• F(n) = n + F(n − 2), если n ≥ 3.
• Чему равно значение выражения F(2022) – F(2018)?

24. Задача 8

• Алгоритм вычисления значения функции F(n), где n –
целое неотрицательное число, задан следующими
соотношениями:
• F(n) = 0 при n ≤ 1; F(n) = 2 × n + F(n − 1), если n > 1 и
при этом n нечётно;
• F(n) = 2 × F(n − 1) , если n > 1 и при этом n чётно.
• Чему равно значение функции F(24)?

25. Задача 9

• Алгоритм вычисления значения функции F(n), где n –
натуральное число, задан следующими
соотношениями:
• F(n) = 1 при n < 3; F(n) = F(n − 2) − F(n − 1), если n > 2
и при этом n чётно;
• F(n) = 2 × F(n − 1) − F(n − 2), если n > 2 и при этом n
нечётно.
• Чему равно значение функции F(19)?

26. Задача 10

• Алгоритм вычисления значения функции F(n), где n –
натуральное число, задан следующими
соотношениями:
• F(n) = 1 при n < 3; F(n) = F(n − 1) + n − 1, если n > 2 и
при этом n чётно;
• F(n) = F(n − 2) + 2 × n − 2, если n > 2 и при этом n
нечётно.
• Чему равно значение функции F(36)?

27. Задача 11

• Алгоритм вычисления значения функции F(n), где n –
натуральное число, задан следующими
соотношениями:
• F(n) = 1 при n = 1; F(n) = n + F(n − 1), если n чётно;
• F(n) = 2 × F(n − 2), если n > 1 и при этом n нечётно.
• Чему равно значение функции F(24)?

28. Задача 12

• Алгоритм вычисления значения функции F(n), где n –
натуральное число, задан следующими
соотношениями:
• F(n) = 1 при n < 3; F(n) = F(n − 2) − F(n − 1), если n > 2
и при этом n чётно;
• F(n) = 2 × F(n − 1) − F(n − 2), если n > 2 и при этом n
нечётно.
• Чему равно значение функции F(18)?

29. Задача 13

• Алгоритм вычисления значения функции F(n), где n –
целое неотрицательное число, задан следующими
соотношениями:
• F(n) = 0 при n ≤ 1; F(n) = 2 × n + F(n − 1), если n > 1 и
при этом n нечётно;
• F(n) = 2 × F(n − 1) , если n > 1 и при этом n чётно.
• Чему равно значение функции F(22)?

30. Задача 14

• Алгоритм вычисления значения функции F(n), где n –
целое неотрицательное число, задан следующими
соотношениями:
• F(n) = 0 при n ≤ 1;
• F(n) = 2 × F(n − 1) + 2, если n > 1 и при этом n
нечётно;
• F(n) = n / 2 + F(n − 1), если n > 1 и при этом n чётно.
• Чему равно значение функции F(26)?
• Примечание. При вычислении значения F(n)
используется операция целочисленного деления.

31. Задача 15

• Алгоритм вычисления значения функции F(n), где n –
натуральное число, задан следующими
соотношениями:
• F(n) = 1 при n = 1; F(n) = n + F(n − 1), если n чётно;
• F(n) = 2 × F(n − 2), если n > 1 и при этом n нечётно.
• Чему равно значение функции F(24)?

32. Задача 16

• Алгоритм вычисления значения функции F(n), где n –
целое неотрицательное число, задан следующими
соотношениями:
• F(n) = 0 при n ≤ 1; F(n) = 2 × F(n − 1) + 2, если n > 1 и
при этом n нечётно;
• F(n) = n / 2 + F(n − 1), если n > 1 и при этом n чётно.
• Чему равно значение функции F(28)? Примечание.
При вычислении значения F(n) используется
операция целочисленного деления.

33. Задача 17

• Алгоритм вычисления значения функции F(n), где n –
целое неотрицательное число, задан следующими
соотношениями:
• F(n) = 0 при n ≤ 1; F(n) = 2 × F(n − 1) + 2, если n > 1 и
при этом n нечётно;
• F(n) = n / 2 + F(n − 1), если n > 1 и при этом n чётно.
• Чему равно значение функции F(30)?
• Примечание. При вычислении значения F(n)
используется операция целочисленного деления.

34. Задача 18

• Алгоритм вычисления значения функции F(n), где n –
натуральное число, задан следующими
соотношениями:
• F(n) = 2 при n < 3;
• F(n) = F(n − 2) + F(n − 1) – n, если n > 2 и при этом n
чётно;
• F(n) = F(n − 1) − F(n − 2) + 2 × n, если n > 2 и при этом
n нечётно.
• Чему равно значение функции F(32)?

35. Задача 19

• Алгоритм вычисления значения функции F(n), где n –
целое неотрицательное число, задан следующими
соотношениями:
• F(n) = 0 при n ≤ 1; F(n) = (n + 1) / 2 + F(n − 1), если n >
1 и при этом n нечётно;
• F(n) = 2 × F(n − 1) + 1, если n > 1 и при этом n чётно.
• Чему равно значение функции F(33)?
• Примечание. При вычислении значения F(n)
используется операция целочисленного деления

36. Задача 20

• Алгоритм вычисления значения функции F(n), где n –
натуральное число, задан следующими
соотношениями:
• F(n) = 1 при n = 1;
• F(n) = n – 2 + F(n − 1), если n > 1.
• Чему равно значение выражения F(2024) – F(2022)?

37. Задача 21

• Алгоритм вычисления значения функции F(n), где n –
натуральное число, задан следующими
соотношениями:
• F(n) = 3 при n = 1;
• F(n) = n + 2 + F(n − 1), если n > 1.
• Чему равно значение выражения F(2023) – F(2021)?

38. Задача 22

• Алгоритм вычисления значения функции F(n), где n –
натуральное число, задан следующими
соотношениями:
• F(n) = n при n >= 2025;
• F(n) = n + F(n + 2), если n < 2025.
• Чему равно значение выражения F(2022) – F(2023)?

39. Задача 23

• Алгоритм вычисления значения функции F(n), где n –
натуральное число, задан следующими
соотношениями:
• F(n) = n при n >= 2025;
• F(n) = n + 3 + F(n + 3), если n < 2025.
• Чему равно значение выражения F(2018) – F(2022)?

40. Задача 24

• Алгоритм вычисления значения функции F(n), где n –
натуральное число, задан следующими
соотношениями:
• F(n) = n при n >= 2025;
• F(n) = n + 3 + F(n + 3), если n < 2025.
• Чему равно значение выражения F(23) – F(21)?

41. Задача 25

• Алгоритм вычисления значения функции F(n), где n –
натуральное число, задан следующими
соотношениями:
• F(n) = 5 при n = 1;
• F(n) = 2n + 1 + F(n - 1), если n > 1.
• Чему равно значение выражения F(2024) – F(2022)?

42. Задача 26

• Алгоритм вычисления значения функции F(n), где n –
натуральное число, задан следующими
соотношениями:
• F(n) = 3 при n = 1;
• F(n) = 3n + 2 · F(n - 1), если n > 1.
• Чему равно значение выражения
• F(2024) – 4 · F(2022)?

43. Задача 27

• Алгоритм вычисления значения функции F(n), где n –
натуральное число, задан следующими
соотношениями:
• F(n) = 1 при n = 1;
• F(n) = 2 при n = 2;
• F(n) = n · (n-1) + F(n - 1) + F(n - 2), если n > 2.
• Чему равно значение выражения F(2024) – F(2022) –
2 · F(2021) – F(2020)?

44. Ответы

• 4) 4045
• 5) 6069
• 6) 114243
• 7) 4042
• 8) 40852
• 9) 577
• 10) 648
• 11) 2072
• 12) 169
• 13) 20380
• 14) 24559
• 15) 2072

45. Ответы

• 16) 49134
• 17) 98285
• 18) 3194
• 19) 262124
• 20) 4043
• 21) 4049
• 22) 2024
• 23) 4049
• 24) 1338
• 25) 8096
• 26) 18210
• 27) 12271520
English     Русский Rules