Показать сообщение отдельно
Старый 17.03.2015, 22:58
dimarik вне форума Посмотреть профиль Отправить личное сообщение для dimarik Найти все сообщения от dimarik
  № 13  
Ответить с цитированием
dimarik
.
 
Аватар для dimarik

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
Нерекурсивными, по-моему =) Все состояние объекта сохраняется в нем же. Я бы назвал это обходом с помощью очереди. Но сама очередь есть распределенная сущность, состоящая из других объектов, сохраняющихся в обходящих. Короче, нам в любом случае нужна очередь
Код:
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. Его использование вообще не попадает под определение рекурсии.

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

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

Код:
В программировании рекурсия — вызов функции (процедуры) из неё же самой, непосредственно
 (простая рекурсия) или через другие функции (сложная или косвенная рекурсия)
__________________
Воспитан в TimeZero. Работаю в Mail.ru.


Последний раз редактировалось dimarik; 17.03.2015 в 23:11.