23

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

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



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



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


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


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




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

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

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


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

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

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

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


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

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

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


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

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

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

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


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

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

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


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

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


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

Знакомитесь

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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


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

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

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

Вы смотрите срез комментариев. Показать все
0
Автор поста оценил этот комментарий
Я не программист,а строитель,причём без образования... Но мне интересно,и интересно что я смогу понять.Есть желание поучится.
Если тебе не лень рассказывать то я не буду ленится спрашивать :-)

def tree(x); где х будет равен 100
if x<5;
return; куда он нас вернёт? К функции сначало где Х будет сного равен 100? Илиже это приведёт к бесконечному цыклу? Если я не ошибаюсь бесконечный цикл без пауз приведёт к зависанию системы?

else
forward(x); тут х всё еще равен 10
left(45)
tree(x/2); тут я так понимаю х уже равен 50
right(90)
tree(x/2); тут х=25
left(45)
back(x); тут все еще х=25
return

left(90) - Для чего это?
Tree(100)
Hideturtle()
раскрыть ветку (6)
0
Автор поста оценил этот комментарий

В блок if он зайдёт только если x < 5, так что этот блок будет пропущен при вызове с аргументом 100.


Цикл и рекурсия - разные вещи.


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


Вызов x/2 не перезаписывает переменную, а только возвращает значение x/2, поэтому x во всём блоке функции везде равен 100.

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

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

left(90)
Tree(100)
Hideturtle()

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

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

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

Иллюстрация к комментарию
раскрыть ветку (1)
0
Автор поста оценил этот комментарий
Ааа тоесть при def tree(x) мы просто задали функции tree значение (х).А в функцию сразу не попали так как (х) пока еще не <5.
Предыдущие лекции не читал,эта первая на которую наткнулся.Почитаю,буду разбиратся.Спасибо за ответы.
Вы смотрите срез комментариев. Чтобы написать комментарий, перейдите к общему списку

Темы

Политика

Теги

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

Сообщества

18+

Теги

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

Сообщества

Игры

Теги

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

Сообщества

Юмор

Теги

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

Сообщества

Отношения

Теги

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

Сообщества

Здоровье

Теги

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

Сообщества

Путешествия

Теги

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

Сообщества

Спорт

Теги

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

Сообщества

Хобби

Теги

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

Сообщества

Сервис

Теги

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

Сообщества

Природа

Теги

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

Сообщества

Бизнес

Теги

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

Сообщества

Транспорт

Теги

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

Сообщества

Общение

Теги

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

Сообщества

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

Теги

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

Сообщества

Наука

Теги

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

Сообщества

IT

Теги

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

Сообщества

Животные

Теги

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

Сообщества

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

Теги

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

Сообщества

Экономика

Теги

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

Сообщества

Кулинария

Теги

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

Сообщества

История

Теги

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

Сообщества

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

Теги

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

Сообщества