7.99M
Категория: ПрограммированиеПрограммирование

Python. Рекурсии

1.

Python
Рекурсии

2.

ВОПРОС
Что делает эта функция?
Python

3.

ОТВЕТ
Функция принимает 2 аргумента
Если первый аргумент больше второго — печатает на экран сообщение
“Первая переменная больше второй”
Иначе если первый аргумент равен второму — печатает на экран сообщение
“Первая переменная равна второй”
Иначе — печатает на экран сообщение “Первая переменная меньше второй”
Python

4.

ВОПРОС
Что делает эта функция?
Python

5.

ОТВЕТ
Функция принимает 1 аргумент, создает новую функцию, которая выводит
на экран текст и этот аргумент и возвращает полученную функцию
Затем полученная функция записывается в переменную func20
и вызывается
Python

6.

ВОПРОС
Что делает этот алгоритм?
Python

7.

ОТВЕТ
Функция принимает 1 аргумент, создает новую функцию, которая
выводит на экран текст, вызывает полученный аргумент
и возвращает полученную новую функцию
Затем полученная функция записывается
в переменную func5
и вызывается
Python

8.

Создавая функции можно случайно (или специально)
сделать вот так:
Функция в ходе своей работы
вызывает саму себя
Как думаете, что
произойдет?
Python

9.

Python во время работы хранит информацию о том, какую функцию
он выполняет в данный момент и откуда она была запущена.
В случае вызова функции из функции она будет бесконечно вызывать
саму себя, заполняя память компьютера, и в какой-то момент она
переполнится и больше не сможет запускать новые функции
Python

10.

Поэтому python будет запускать эту
функцию постоянно, пока не
переполнится память, отвечающая за
отслеживание функций, которая
называется стеком
Перед ошибкой было
очень много таких строк
Python

11.

Можно немного изменить функцию
Теперь она принимает аргумент (число), а внутри себя
вызывает саму себя с числом на 1 меньше
Python

12.

Функция вызывает саму себя, каждый раз
передавая все меньшее число. В итоге все
равно происходит ошибка
Алгоритм, когда функция вызывает саму
себя называется рекурсия!
Но такая рекурсия, как
показано справа — плохая! Её не остановить!
Python

13.

Рекурсия — алгоритм, когда функция вызывает саму себя
Плохая рекурсия, так как
ее не остановить!
Python

14.

Чтобы рекурсия была хорошей и даже полезной нужно
обязательно придумать условие выхода из нее
Выход из функции,
а значит и из
рекурсии
Python

15.

ВОПРОС
Знаете ли вы, что такое
числа Фибоначчи?
Python

16.

ОТВЕТ
Числа Фибоначчи — это числовая последовательность, в которой первые два числа которой
являются единицами, а каждое следующее за ними число является суммой двух
предыдущих.
Названы они в честь средневекового математика Леонардо Пизанского,
известного как Фибоначчи
Фибоначчи — первый крупный математик средневековой Европы.
Его задачи, как и их аналоги, продолжали использовать в различных
математических учебниках несколько столетий
Python

17.

Первые два числа Фибоначчи являются единицами, а каждое следующее за
ними число является суммой двух предыдущих.
1-е число Фибоначчи
1
2-е число Фибоначчи
1
3-е число Фибоначчи
1
+
1
=
2
4-е число Фибоначчи
1
+
2
=
3
5-е число Фибоначчи
2
+
3
=
5
6-е число Фибоначчи
3
+
5
=
8
7-е число Фибоначчи
5
+
8
=
13
Python

18.

Первые 10 чисел Фибоначчи
Порядковый номер
1
2
3
4
5
6
7
8
9
10
Число Фибоначчи
1
1
2
3
5
8
13
21
44
65
Python

19.

ЗАДАНИЕ
Посчитайте 14-ое число
Фибоначчи!
Порядковый номер
1
2
3
4
5
6
7
8
9
10
Число Фибоначчи
1
1
2
3
5
8
13
21
44
65
Python

20.

ПРИМЕР
Порядковый номер
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Число Фибоначчи
1
1
2
3
5
8
13
21
44
65
109
174
283
455
14-ое число Фибоначчи
равно 455!
Python

21.

Мы могли бы написать функцию для поиска числа Фибоначчи
прямо в python!
Наша функция будет принимать число — порядковый номер
числа и возвращать само число Фибоначчи!
Начнем с простого. Мы знаем, что первые
2 числа из последовательности Фибоначчи
это единицы
Python

22.

Если ввести число больше двух — ничего не выведется
Python

23.

Мы знаем, что каждое новое число это сумма двух предыдущих.
Это мы и напишем в функции:
Python

24.

Проверим по нашей
табличке! Все совпадает!
Порядковый номер
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Число Фибоначчи
1
1
2
3
5
8
13
21
44
65
109
174
283
455
Python

25.

А теперь попробуем число побольше!
Python

26.

Проблема в том, что если мы захотим вывести сороковое число
в последовательности Фибоначчи — python будет считать его
дольше 30 секунд!
А на 50-е число у него может уйти больше часа!
Python

27.

Проблема рекурсии для задачи поиска чисел Фибоначчи
Мы много раз считаем одни и те же числа
Python

28.

Поэтому рекурсии чаще всего не подходят для эффективного
решения каких-либо задач и лучше придумать
что-то более эффективное
Мы же сможем придумать
что-то более эффективное?
Python

29.

ЗАДАНИЕ
Попробуйте сами написать функцию, которая не при помощи рекурсии,
а при помощи цикла посчитает нужное число Фибоначчи
Например, для поиска 15 числа Фибоначчи можно создать цикл, который повторится 15 раз
и будет считать числа с помощью переменных, складывая 2 последних числа и получая новое
Python

30.

ПРИМЕР
Первые 2 числа нет
смысла считать
Первые 2 числа
Следующее число — сумма
двух предыдущих
Смещение всех чисел
Теперь любое число считается меньше чем за секунду!
Python

31.

ДОПОЛНИТЕЛЬНЫЕ ЗАДАНИЯ
1
Создайте аналог чисел Фибоначчи со своими правилами!
Python

32.

ВОПРОСЫ
1
Что такое рекурсия?
2
Почему рекурсии не всегда работают
эффективно?
Python

33.

Не забудь
сохранить
программу!
Python

34.

Python
Способы сохранения информации.
Объектно-ориентированное программирование

35.

ВОПРОС
Как при помощи кода из строковой
переменной сделать числовую?
Python

36.

ОТВЕТ
При помощи функции int
Python

37.

ЗАДАНИЕ
Давайте спросим
у пользователя его имя
и запишем в переменную
Python

38.

ПРИМЕР
Python

39.

ЗАДАНИЕ
Давайте теперь спросим у него его
фамилию, возраст, рост и вес
и запишем их в разные переменные
Python

40.

ПРИМЕР
Не забываем про перевод
строковых данных в число,
где это нужно
Python

41.

У нас получилось множество переменных.
Если представить, что людей может быть много — создавать для
каждой характеристики каждого человека может быть неудобно
Python

42.

ЗАДАНИЕ
Придумайте способ, как можно было бы записать эти данные в виде
одной переменной, так чтобы каждую отдельную характеристику
человека можно было использовать потом
Чтобы вместо 5 переменных
все хранилось в одной? Хмм
Python

43.

ПРИМЕР
Можно сохранить информацию в виде списка, и одни и те же переменные
использовать много раз
Но тогда не очень понятно, какой элемент
за что отвечает, нам нужно самим запомнить,
на каком месте находится фамилия,
а на каком — рост
Python

44.

ВОПРОС
Как вывести из этого списка
на экран рост пользователя?
Python

45.

ОТВЕТ
Как обычно при помощи [ ]
Python

46.

Более удобно использовать словарь, где ключами будут имя,
фамилия, рост и так далее, а значениями то что ввел пользователь
Перепишите этот код
Python

47.

ЗАДАНИЕ
Давайте выведем на экран
рост пользователя из
словаря
Python

48.

ПРИМЕР
Это делается все так же, с помощью [ ]
Python

49.

А теперь это все можно завернуть в функцию, которая будет
возвращать готовый словарь!
Python

50.

Теперь чтобы добавить словарь с новым человекому нужно просто
вызвать эту функцию и она сама все спросит и вернет готовый словарь
Python

51.

ВОПРОС
Какие характеристики человека
мы сейчас сохраняем?
Python

52.

ОТВЕТ
Имя, фамилия, возраст,
рост и вес
Python

53.

Более правильным способом хранения данных об объектах
реального мира являются классы и собственно объекты
Классы.. И объекты..?
Python

54.

Класс — это шаблон набора характеристик и действий
какого-то объекта
И уже на основе класса можно будет сделать объекты,
у которых эти характеристики будут заданы именно в виде чисел
Объект IPhone 13 Pro
Класс Телефон
Цвет
Размер
Батарея
Разрешение экрана
Цвет — Золотой
Размер — 146,7 × 71,5 × 7,65 мм
Батарея — 4500 мАч
Разрешение экрана — 2532×1170
Объект Xiaomi Note 9
Цвет — Белый
Размер — 150 × 76,5 × 8 мм
Батарея — 5100 мАч
Разрешение экрана — 2532×1170
Python

55.

Как создать класс
Обязательный аргумент, который
просто нужно написать здесь
Класс, на основе которого можно
будет создать много объектов
Функция, которая запустится
автоматически при создании
объекта на основе этого класса
Собственные
переменные объекта
Python

56.

Как создать объекты на основе класса
Класс, на основе которого можно
будет создать много объектов
Создание нового объекта на
основе класса Person
Переменная, в которую мы
сохраним этот объект
Python

57.

Таких объектов с разными характеристиками теперь
можно создавать сколько угодно!
Все они будут разными, то есть
в их собственных переменных
будут храниться разные числа
Python

58.

Как же получить из какого-то объекта нужную
характеристику?
Python

59.

ЗАДАНИЕ
Выведите на экран вес
созданного объекта
Python

60.

ПРИМЕР
Это делается все так же, с помощью [ ]
Python

61.

Теперь в функции можно создавать не новый словарь,
а новый объект!
Python

62.

ДОПОЛНИТЕЛЬНЫЕ ЗАДАНИЯ
1
Добавьте собственных переменных в класс
Python

63.

ВОПРОСЫ
1
Что такое классы?
2
Что такое объекты?
Python

64.

Не забудь
сохранить
программу!
Python

65.

Спасибо за участие!
Python
English     Русский Правила