Рекурсия
чтобы понять рекурсию, надо понять рекурсию
©
Для того чтобы понять саму рекурсию, нужно понять как работает рекурсивная функция. Рекурсивная функция - обычная функция, при выполнении которой, может себя вызвать. Я думаю данную функцию необходимо рассмотреть на примере. Допустим функцию, которая вычисляет факториал числа:
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:
- что
- зачем
- примеры использования
- примеры использования