злой чечен ползет на берег - рекурсия [entries|archive|friends|userinfo]
aculeata

[ website | Барсук, детский журнал ]
[ userinfo | ljr userinfo ]
[ archive | journal archive ]

рекурсия [May. 3rd, 2019|01:10 am]
Previous Entry Add to Memories Tell A Friend Next Entry
Б. П. Гейдман, покойный с этого года учитель математики,
объясняя нам рекурсию, говорил так: ну ты, старик,
даешь. Нет, ты не понял, откуда здесь корень из пяти.
А такие вещи надо понимать, это понимает любая кухарка,
если у нее государственный ум. Ты не понял -- спроси
у своей мамы, она понимает. Как устроена рекурсия
в государственной безопасности? Сначала происходит
событие. Потом группа A (пишет "A" на доске) убивает
всех его свидетелей. После этого специально назначенная
группа "B" убивает группу "A", группа "C" -- группу
"B", и так далее до конца алфавита. Но это по плану.
А в каком месте это не работает? Правильно. Когда
"B" убивает "A", группа "C" смотрит на это и разбегается.
Потому что рекурсию понимают даже чекисты. Думай,
старик, думай. А, уже написал? Молодец.
LinkLeave a comment

Comments:
[User Picture]
From:[info]hex_laden
Date:May 2nd, 2019 - 09:06 pm
(Link)
Хм, по объяснению больше на цикл похоже, чем на рекурсию... А когда "C" разбегается - это break не в том месте воткнули.
[User Picture]
From:[info]stereo_sanctity
Date:May 2nd, 2019 - 09:20 pm
(Link)
Цикл и рекурсия это одно и то же.

Вот здесь: http://wiki.c2.com/?RecursionVsLoop люди в основном подтверждают этот факт, но один дядя говорит что в его компании за использование рекурсии увольняют:

Far from being elegant, where I work we consider recursion to be the 'goto' of the 21st century. The first use of recursion by a developer gets a verbal warning, second use a written reprimand, and we fire on the third use.



wiki.c2.com вообще лучший в мире сайт после lj.rossia.org
дядя, что характерно, анон
[User Picture]
From:[info]blu4sezon
Date:May 2nd, 2019 - 09:41 pm
(Link)
Вот нифига!

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

Рекурсия это скорее не то, что было объяснено, а когда
Группа "A" убивает всех свидетелей, потом сама вызывает группу B, чтоб убили ее, группа B сама вызывает группу C. Кончился алфАвит - переполнение стэка.
[User Picture]
From:[info]stereo_sanctity
Date:May 2nd, 2019 - 09:59 pm
(Link)
Стек переполнится если таковой есть, а существуют вычислительные среды где стека нет. Там и переполнения стека не бывает. Erlang в пример.
[User Picture]
From:[info]hex_laden
Date:May 2nd, 2019 - 10:15 pm
(Link)
Стек есть везде (если у тебя x86/AMD64 проц, с памятью соответствующей). Не, если у тебя проц скрученный с НЛО, то там стека может не быть, например, при переполнении данные отправляются в ближайшую к компу черную дыру.

>вычислительные среды
>Erlang

Эрланг - не вычислительная среда, а язык программирования. Может там просто хороший сборщик мусора, который не позволяет стеку переполниться. Вообще, такое и для конкретной задачи можно сделать, хоть на C#, сделай себе "сборщик мусора" в конкретном проекте, чтоб проверял, и ловил момент когда пиздец.
[User Picture]
From:[info]stereo_sanctity
Date:May 2nd, 2019 - 10:27 pm
(Link)
> Стек есть везде (если у тебя x86/AMD64 проц, с памятью соответствующей)

Ну тут сразу верная поправка, что на x86 архитектуре есть такая абстракция, стека вызовов. Но есть другие архитектуры например.

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

Помимо языка программирования, Erlang это еще и реализация интерпретатора (это такой кусок софта, который умеет програму на язык программирования переводить в особой байткод; называется erl), и виртуальной машины (это такой кусок, которая сей особый байткод исполняет; называется beam). Понятно, что без erl и beam Эрланг это всего лишь язык программирования, и никакая не вычислительная среда. Однако, Эрланг без erl и beam используют только филонящие студенты, насколько мне известно, все остальные erl и beam используют.

Так вот, виртуальная машина там работает без создания явного стека вызовов как в C# или Java. При этом возможность ходить по цепочке вызовов туда-сюда есть, но используются другие структуры данных, совсем иные накладные расходы на такое хождение.

Вот здесь можно почитать больше про подобные среды вычислений: https://en.wikipedia.org/wiki/Register_machine
[User Picture]
From:[info]hex_laden
Date:May 12th, 2019 - 01:36 pm
(Link)
А, ОК, благодарю за исчерпывающее пояснение по поводу Erlang. Я его в глаза не видел, в руках не держал, не кодил на нем. Один раз мельком посмотрел, хелловорд написал, понял, что IDE говно и пошел ну сами понимаете куда.
[User Picture]
From:[info]qwerty
Date:May 5th, 2019 - 12:29 am
(Link)
Хвостовая рекурсия эквивалентна циклу, а другая - нет.
[User Picture]
From:[info]aculeata
Date:May 2nd, 2019 - 09:57 pm
(Link)
Если что, речь, вполне конкретно, об общей
формуле для n-ного члена последовательности
(в данном случае, думаю, чисел Фибоначчи),
исходно заданной рекурсивно. Быт простого
программиста с этим связан, конечно, но
весьма удаленно.
[User Picture]
From:[info]hex_laden
Date:May 2nd, 2019 - 10:20 pm
(Link)
я уж понял, что речь о чистой математике. Но дело в том, что рекурсия - это когда команда A, сама вызывает команду B, чтоб ее расстреляли, и т.д.

А если просто A расстреливает B, и т.д., то это цикл.

ЗЫ. Оффтоп - вы не могли бы дать отзыв на стихи [info]hronos, он завтра придет ко мне, и ему будет очень приятно услышать ваше мнение.