Рекурсия

чтобы понять рекурсию, надо понять рекурсию ©

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

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:

  • что
  • зачем
  • примеры использования
  • примеры использования

темы/рекурсия.txt · Последнее изменение: 2011/03/18 15:28 — flastar