====== Рекурсия ====== ''чтобы понять рекурсию, надо понять рекурсию'' © Для того чтобы понять саму рекурсию, нужно понять как работает рекурсивная функция. Рекурсивная функция - обычная функция, при выполнении которой, может себя вызвать. Я думаю данную функцию необходимо рассмотреть на примере. Допустим функцию, которая вычисляет [[http://ru.wikipedia.org/wiki/%D0%A4%D0%B0%D0%BA%D1%82%D0%BE%D1%80%D0%B8%D0%B0%D0%BB|факториал ]] числа: function factorial(a:Number):Number { if (a >= 2) { return a * factorial(a - 1); } else { return 1; } } Теперь посчитаем факториал от числа 5, и выведем в трейс. trace(factorial(5)); //Output: 120; Теперь посчитаем факториал от числа 3, и выведем в трейс. trace(factorial(3)); //Output: 6; **Как это?** Всё работает очень просто. Сначала мы вызываем саму функцию и передаем в неё число 3. Далее уже в теле самой функции происходят следующие действия: 1) Проверка, если 3 >=(больше или равно) 2, то вернуть произведение 3 и этой же функции, но только внутрь, мы уже передаем число на единицу меньше a-1 = 2 2) Проверка если 2 >= 2, вернуть произведение 2 и этой же функции, но только внутрь, мы уже передаем число на единицу меньше a-1 = 1 3) Проверка если 1 >= 2, в данном случае ложь, поэтому возвращаем 1. 4) В итоге получается 3*2*1 = 6 Т.е. рекурсия превратила factorial(3) в 3*2*1; **Зацикливание:** Необходимо избегать зацикливания рекурсивной функции путем использования операторов (if, while, for и др.) Самый простой пример зацикливания, это когда функция вызывает себя: function recursion(a:Number):Number { return recursion(a); } TODO: * что * зачем * примеры использования * примеры использования