Показать сообщение отдельно
Старый 23.08.2009, 23:29
incoob вне форума Посмотреть профиль Отправить личное сообщение для incoob Найти все сообщения от incoob
  № 22  
Ответить с цитированием
incoob

Регистрация: Mar 2008
Сообщений: 215
Помоему, вы путаете итераторы и итерации. Заметьте, я про итераторы ничего не говорил. И то, что итератор - это объект, а не действие, никто не оспаривает.

Вы сами пробовали почитать текст по ссылкам, что приводились выше?

"В программировании рекурсия — вызов функции (процедуры) из неё же самой, непосредственно (простая рекурсия) или через другие функции (сложная рекурсия)"© wikipedia.org
"Итерация - это организация обработки данных, при которой действия повторяются многократно, не приводя при этом к вызовам самих себя." © wikipedia.org
"Последовательность инструкций, предназначенная для многократного исполнения, называется телом цикла. Однократное выполнение тела цикла называется итерацией." © wikipedia.org
Надеюсь вы не будете отрицать, что while - это цикл и нигде не производится явных или неявных вызовов вашего метода (contains)?

Итак, вы утверждаете, что производите последовательные вычисления
одной сущности на основании другой, а именно
Код AS3:
child
на основании
Код AS3:
child.parent
Рассмотрим один из наиболее распространенных циклов:
Код AS3:
for (var i:int = 0; i <= n; i++){}
На каждой итерации происходит вычисление
Код AS3:
i
на основе уже вычисленного значения
Код AS3:
i
. По сути тот же случай, что и у вас. Полностью попадает под определение. Для большей наглядности рассмотрим пример. Возмем элементарный класс
Код AS3:
	public class Integer 
	{
		private var _value:int
		public function Integer(value:int)
		{
			_value = value
		}
 
		public function get increment():Integer
		{
			return new Integer(++_value)
		}
 
		public function get isMaxValue():Boolean
		{
			return _value > 5
		}
	}
и используем его в цикле:
Код AS3:
			var i:Integer = new Integer(0);
			for (; !i.isMaxValue; i = i.increment ) { }
ну или, для наглядности
Код AS3:
			var i:Integer = new Integer(0);
			do {} while (!(i = i.increment).isMaxValue)
. Код конечно несколько избыточен, но, по сути, абсолютно идентичен вашему.

Итак, повторю, что уже давно говорил: в приведенном вами коде рекурсий нет.

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

PPS в принципе понятно, что под рекурсией подразумевал etc: последовательно опускаемся по дереву объектов. Но формально это рекурсией не является. Пример рекурсивного кода я уже писал.