Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Прямая кинематика (http://www.flasher.ru/forum/showthread.php?t=210436)

dimarik 17.03.2015 21:06

Цитата:

Сообщение от Zebestov (Сообщение 1180117)
Лишь первый раз мы рекурсивно пройдемся от child1 к root

Если каждый раз у нового объекта дергать метод, то думаю, что это не рекурсия. Рекурсия дернет свой же метод (этого же объекта). Короче, при рекурсии в коллстеке периодически появляется один и тот же объект.

Zebestov 17.03.2015 22:25

Если строго говорить, то ты прав конечно.
Интересно, как такие вызовы называются?

dimarik 17.03.2015 22:58

Нерекурсивными, по-моему =) Все состояние объекта сохраняется в нем же. Я бы назвал это обходом с помощью очереди. Но сама очередь есть распределенная сущность, состоящая из других объектов, сохраняющихся в обходящих. Короче, нам в любом случае нужна очередь
Код:

some nodes must be deferred – stored in some way for later visiting.
This is often done via a stack (LIFO) or queue (FIFO).

Т.о. само понятие "поиска" в, например, дереве, в глубину, подразумевает сохранение уже обойденных нодов. Чтобы потом воспользоваться ими как отправной точкой для перебора их детей. Но вот где будет храниться эта нода: в глобальном Array или на уровне стека вызовов AVM, в котором сохраняется вновь посещенный объект — это без разницы. Если рекурсия — это сохранение ноды в таких объектах, то я не прав. Если рекурсия — это вызов метода у того же самого объекта, то я прав. Отдельно стоит использование глобального Array. Его использование вообще не попадает под определение рекурсии.

Можно строго подойти к рекурсии: не делай лишних объектов в коллстеке и мы не будем называть твой алгоритм рекурсивным. Не знаю, в общем. Я тоже раньше рекурсию, так же как ты, ассоциировал с вызовами "одинаковых" методов у разных объектов. Но вот задумался немного и пришел в замешательство.

Ах, да. Немного пруфов не повредит:

Код:

В программировании рекурсия — вызов функции (процедуры) из неё же самой, непосредственно
 (простая рекурсия) или через другие функции (сложная или косвенная рекурсия)


Zebestov 17.03.2015 23:26

Вот. Обход дерева, да.

dimarik 17.03.2015 23:47

Обход дерева может быть рекурсивным или нерекурсивным.
Там еще из типов обходов в глубину есть. Так же простой обход по парентам (не обход всего дерева, если что). А можно навернуть обход по уровням нод (breadth-first, обход всего дерева).
Ну и ладно. Пусть все будут здорОвы! =)


Часовой пояс GMT +4, время: 23:29.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.