Программирование Python по моим конспектам. Лекция 27
Пост можно топить, минусить и всячески убивать, ибо в горячем он нахер не нужен, а вот подписчикам пригодится.
Для тех кто не в теме, тут я перевожу свои лекции по питону с языка немецкого на язык человеческий, поэтому- если что- я не виноват. Эти лекции созданы не для того, чтобы сделать из человека говнокодера, а для того, чтобы помочь в сложных темах, которые некому объяснить, а книга по программированию не может с этим помочь. Если вы никогда не были в такой ситуации- значит вы вундеркинд и я хочу от вас детей.
Отвечая на 90% одинаковых вопросов-
Я знаю, что это есть в каждой книге по питону. Это логично. Не логично было бы, если бы это было в книге по анатомии хомяков.
Я это делаю, потому что мне это нравится.
Ахой, я выбрался, дабы наваять вам очередную лекцию. И я еще вот решил писать номер лекции по порядку, а не как раньше- через точку. Так сподручнее
Надеюсь, все за это время уже напрограммировали нашу игру с планетами, и она выглядит уже как то так
Нет? Ну и хрен с ней.
Я думал долго, писать ли лекции более подробно, или упоминать самое необходимое, но быстро. Но решил писать подробно и затянуть все на сраные года. Однако, если я вас заебал у вас другие предложения- готов выслушать.
Сегодня поговорим о таком звере, как рекурсивная функция.
Это очень непростой зверь, но при детальном изучении оного, мы получим отличный инструмент.
Рекурсивная функция в двух словах, это функция, которая вызывает сама себя.
Вы, дорогие друзья, тоже можете быть носителями рекурсии. Вот вам пример. Попали вы в незнакомый город, и спрашиваете прохожих как попасть на вокзал. Выглядит это так
-Подскажите пожалуйста, как пройти на вокзал
-Дойдите до перекрестка, сверните направо, а там еще кого-нибудь спросите.
вы так и делаете, и возвращаетесь к вашей просьбе. И делаете это до тех пор, пока вы не упретесь мордашкой в вокзального бомжа и не поймете, что вы таки добрались. На этом ваша рекурсия закончилась.
Наш мозг запрограммирован так
- Если проблема решается легко- решай ее
-если нет- ищи путь, который кажется тебе более легким для ее решения
Иногда проблема не решается легко, да и вообще никак не решается. Это называется бесконечной рекурсией. Сейчас приготовитесь впасть в бесконечную рекурсию
Подумайте над предложением "мои предки это мои родители и предки моих родителей..и предки моих предков....."
Мы сейчас пытаемся понять дефиницию слова "предки", но нам это не удается и мы падаем в глубокую прострацию, перебирая проблему до бесконечности.
Самый известный пример бесконечной рекурсии, без которого ни одна говнокнижка или говнопост типа этого, не обойдется, и выглядит так
Зеркало в зеркале....
Для того, чтобы показать как работает рекурсия мы позовем черепашку
Знакомитесь
Это Череапах. И в нашем коде, мы так и напишем import turtle (turtle- пинд. яз- черепаха)
Черепах очень хороший зверь и он покажет нам визуально, то, что сложно объяснить словами. Смотрим ниже. Вот так она выглядит
черепах смотрит на право
Сейчас я сказал ей пройти прямо на 100 пикселей, затем развернуться на 90 градусов и пройти вниз на 200 пикселей с помощью этого кода
А теперь загоним нашего зверя в рекурсию
Вот что мы имеем на выходе
Каждый раз вызывая сама себя функция передает себе каждый раз новый аргумент х (порядком уменьшенным ввиду умножения на 0,9)
Выглядит это так-
Сначала х равен 200
передаем его в функцию
идем на 200 пикселей прямо
поворачиваем на право
умножаем 200 на 0,9- получаем 180
х указывает на 180
передаем 180 в функцию
идем на 180 прямо..... и пока х не станет меньше 5
еще один пример, который введет вас в ступор. Рисуем дерево. Сейчас из каждой ветки мы будем отращивать еще пару веток, а из них еще ветки.. короче это как модель спаривания кроликов из ранних лекций. Только дерево.
И вот вам дерево..
Для того чтобы понять, мой совет- на бумажке попробуйте написать себе как работает эта функция и какие значения принимает х. Куда при этом идет черепах и куда он смотрит при этом. На сегодня все. Дерзайте










