logo search
Shpory_Sistemnyy_analiz

13. Рекурсивный вычислительный процесс.

Рекурсия-процедура, вызывающая сама себя. Когда функция A в своем теле вызывает только одну рекурсивную функцию (саму себя), то это простая рекурсии. Косвенной рекурсия - это явление, когда рекурсивные функции вызывают друг друга (например, функция А вызывает B, а функция B вызывает A).

Прямая рекурсия

Косвенная рекурсия

void A(){

Операторы;

A();

Операторы;

}

void A(){

Операторы;

B();

Операторы;

}

void B(){

Операторы;

A();

Операторы;

}

Рекурсивные алгоритмы сложнее отлаживать, но порой они позволяют очень гибко и красиво решить задачу. Любой рекурсивный алгоритм можно заменить нерекурсивным, но это будет дольше реализовать. Рекурсия часто применяется при решении задач с нисходящим динамическим программированием, а так же в переборных задачах. Рекурсивная функция не должна вызывать себя всегда, иначе программа работать не сможет. При реализации рекурсивных алгоритмов необходимо уделять внимание тому, чтобы алгоритм был конечным. Факториал.Самый простой пример рекурсивного решения - задача о вычислении факториала.. Здесь нужно определить некоторую функцию F(n), которая будет вычислять значение n! через саму себя. В данном случае воспользуемся рекуррентной ф-лой:F(n) = F(n-1)*n. условие выхода: если n<2, то ответ равен 1. Т.о., в тех случаях, когда n<2, функция не будет себя вызывать, что будет гарантировать выход из рекурсии.//Вычисление факториала int F(int n) // {if n<2 then return 1; // else return F(n-1)*n; // }