Similar presentations:
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