23

Программирование Python по моим конспектам. Лекция 27

Пост можно топить, минусить и всячески убивать, ибо в горячем он нахер не нужен, а вот подписчикам пригодится.



Для тех кто не в теме, тут я перевожу свои лекции по питону с языка немецкого на язык человеческий, поэтому- если что- я не виноват. Эти лекции созданы не для того, чтобы сделать из человека говнокодера, а для того, чтобы помочь в сложных темах, которые некому объяснить, а книга по программированию не может с этим помочь. Если вы никогда не были в такой ситуации- значит вы вундеркинд и я хочу от вас детей.



Отвечая на 90% одинаковых вопросов-


Я знаю, что это есть в каждой книге по питону. Это логично. Не логично было бы, если бы это было в книге по анатомии хомяков.


Я это делаю, потому что мне это нравится.




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

Надеюсь, все за это время уже напрограммировали нашу игру с планетами, и она выглядит уже как то так

Нет? Ну и хрен с ней.


Я думал долго, писать ли лекции более подробно, или упоминать самое необходимое, но быстро. Но решил писать подробно и затянуть все на сраные года. Однако, если я вас заебал  у вас другие предложения- готов выслушать.

Сегодня поговорим о таком звере, как рекурсивная функция.

Это очень непростой зверь, но при детальном изучении оного, мы получим отличный инструмент.

Рекурсивная функция в двух словах, это функция, которая вызывает сама себя.


Вы, дорогие друзья, тоже можете быть носителями рекурсии. Вот вам пример. Попали вы в незнакомый город, и спрашиваете прохожих как попасть на вокзал. Выглядит это так

-Подскажите пожалуйста, как пройти на вокзал

-Дойдите до перекрестка, сверните направо, а там еще кого-нибудь спросите.


вы так и делаете, и возвращаетесь к вашей просьбе. И делаете это до тех пор, пока вы не упретесь мордашкой в вокзального бомжа и не поймете, что вы таки добрались. На этом ваша рекурсия закончилась.

Наш мозг запрограммирован так

- Если проблема решается легко- решай ее

-если нет- ищи путь, который кажется тебе более легким для ее решения


Иногда проблема не решается легко, да и вообще никак не решается. Это называется бесконечной рекурсией. Сейчас приготовитесь впасть в бесконечную рекурсию

Подумайте над предложением "мои предки это мои родители и предки моих родителей..и предки моих предков....."

Мы сейчас пытаемся понять дефиницию слова "предки", но нам это не удается и мы падаем в глубокую прострацию, перебирая проблему до бесконечности.


Самый известный пример бесконечной рекурсии, без которого ни одна говнокнижка или говнопост типа этого, не обойдется, и выглядит так

Зеркало в зеркале....


Для того, чтобы показать как работает рекурсия мы позовем черепашку

Знакомитесь

Это Череапах. И в нашем коде, мы так и напишем import turtle (turtle- пинд. яз- черепаха)

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

черепах смотрит на право

Сейчас я сказал ей пройти прямо на 100 пикселей, затем развернуться на 90 градусов и пройти вниз на 200 пикселей с помощью этого кода

А теперь загоним нашего зверя в рекурсию

Вот что мы имеем на выходе

Каждый раз вызывая сама себя функция передает себе каждый раз новый аргумент х (порядком уменьшенным ввиду умножения на 0,9)


Выглядит это так-

Сначала х равен 200

передаем его в функцию

идем на 200 пикселей прямо

поворачиваем на право

умножаем 200 на 0,9- получаем 180

х указывает на 180

передаем 180 в функцию

идем на 180 прямо..... и пока х не станет меньше 5


еще один пример, который введет вас в ступор. Рисуем дерево. Сейчас из каждой ветки мы будем отращивать еще пару веток, а из них еще ветки.. короче это как модель спаривания кроликов из ранних лекций. Только дерево.

И вот вам дерево..

Для того чтобы понять, мой совет- на бумажке попробуйте написать себе как работает эта функция и какие значения принимает х. Куда при этом идет черепах и куда он смотрит при этом. На сегодня все. Дерзайте

2
Автор поста оценил этот комментарий

Эх, 46 раз сохранили, а плюсы всего 35 раз поставили (включая 7 минусов). Плохо-плохо!

А вообще, рада, что ты так быстро продвигаешься. Летом подробнее почитаю твои лекции. Так, чтоб засесть на пару дней :)

раскрыть ветку (1)
2
Автор поста оценил этот комментарий
Да мне пофиг на эти плюсы-минусы) Этого добра у меня хватает. Тут я "за идею".

А продвигаюсь я очень-очень медленно. Тяжело найти время. Ибо на перевод и адаптацию лекции я трачу часа 2. А у меня защита кандидатской на носу..так что ну ооочень я редко сейчас пишу посты.

0
Автор поста оценил этот комментарий
У меня всеравно возникает недопонимание.
Я так понимаю код читается с первой строчки и погнал вниз... Так почему тогда так получается что,те о которых мы говорим первые две выполняются в начале а последняя в конце?
Модет посоветуеш какоенибудь стоящие к прочтению пособие для понимания общих процессов программирования и их выполнения?
раскрыть ветку (1)
0
Автор поста оценил этот комментарий
Все верно, интерпретатор читает все сверху вниз. строка за строкой, он читает названия функций и параметры, которые она принимает. НО!!. Пока мы эту функцию не вызовем, она не исполнится. И вот доходим мы до той строки, где она вызывается и мы уже не идем вниз, а "скачем" вверх. Туда, где объявлена вызываемая функция.

Видимо, ты не читал предыдущие лекции. Там все это описано.

ИЗ книг посоветую для начала

Иллюстрация к комментарию
показать ответы
0
Автор поста оценил этот комментарий

Автор, можно ли с тобой пообщаться не тут?

раскрыть ветку (1)
0
Автор поста оценил этот комментарий
Можете писать в более старые мои посты. Там все-равно никто не прочтет
0
Автор поста оценил этот комментарий
Я немного на Басике для игрули скрипты писал,там если цикл был бесконечный без пауз он грузил процессор на 100% и соответственно вешал всё.

Непонимаю как он попадёт в этот блок

left(90)
Tree(100)
Hideturtle()

Если его всегда будет отбрасывать к началу функции return ? Тоесть в какой момент применится left(90) ?
раскрыть ветку (1)
0
Автор поста оценил этот комментарий
В бейсике и, к примеру, С++ и ТД некоторые бесконечные циклы могут грузить систему, но это легко лечится.
Относительно вопроса. Эти три строки выполняться единожды. Первые две в самом начале работы программы. Последняя в конце прячет черепаху
показать ответы

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества

Недвижимость и ремонт

Теги

Популярные авторы

Сообщества