Рекурсия

от Уикипедия, свободната енциклопедия
Направо към: навигация, търсене

Рекурсия е процеса на повтаряне по себеподобен начин. Например при поставянето на две огледала паралелно едно срещу друго се получават вложени изображения, които са пример за безкрайна рекурсия. Терминът има ред значения в различни дисциплини от лингвистика до логика. Най-често се използва в математиката и информатиката, където рекурсията е начин да се определи нещо (обикновено математически обект или част от компютърна програма) чрез обръщане към себе си.

Най-често срещаният пример за рекурсивно дефинирана функция е следната дефиниция за функцията f(n), която е факториел;

f(0) = 1
f(n) = n · f(n − 1)   за всяко естествено число n > 0

С тази дефиниция може да се изчисли f(3) например:

f(3) = 3 · f(3 − 1)

= 3 · f(2)
= 3 · 2 · f(2 − 1)
= 3 · 2 · f(1)
= 3 · 2 · 1 · f(1 − 1)
= 3 · 2 · 1 · f(0)
= 3 · 2 · 1 · 1
= 6

Същата функция на програмния език C може да бъде написана по следния начин:

unsigned int factorial(unsigned int n)
{
  if (n == 0)
    return 1;
  else
    return n * factorial(n-1);
}

В информатиката една рекурсивна функция трябва да има поне два елемента: 1) базов случай; 2) повикване към себе си. Базовият случай е условието за излизане от рекурсията. Ако няма такова условие, то рекурсията ще продължи до безкрайност. В случая с фактореила, базовият случай е че факториел от 0 е равен на 1 - тогава рекурсията се прекъсва. Второто условие е функцията да извиква сама себе си. В горния случай функцията factorial() извиква себе си, освен ако условието за излизане от рекурсията не е удовлетворено.

Други типични примери за рекурсия са решаването на задачата за Ханойската кула и числата на Фибоначи.