Программирование рекурсивных алгоритмов
Рекурсивные
функции делят на собственно рекурсивные
и косвенно рекурсивные. Функция
называется косвенно рекурсивнойв
том случае, если она содержит обращение
к другой функции, содержащий вызов
данной функции.
Например, функции
AиBявляются
косвенно рекурсивными.
void
A(int );
void
B (int b) {… A(…); …}
void A
(int a) {… B(…); …}
Если же в теле
функции имеется вызов самой этой
функции, то речь идет о прямой рекурсии,
а такую функцию называет рекурсивной.
Например, функция
А является рекурсивной:
void
A (int a) {… A(…); …}
Рекурсивные
алгоритмы эффективны в тех задачах,
где рекурсия используется в определении
данных.Если у задачи есть очевидное
итерационное решение, то рекурсии
следует избегать. Поэтому серьезное
изучение рекурсивных методов нужно
проводить, вводя динамические структуры
данных.
При разработке
рекурсивной функции важно помнить, что
в ней должен быть хотя бы один не
рекурсивный выход.
Классический
пример рекурсивной функции – вычисление
факториала:
long
factorial (int k)
{
if(k<0)return0; // нерекурсивный выход
if(k==0)return1;
// нерекурсивный выход
returnk*factorial(k-1);
}
Функции стандартной библиотеки языка с для работы со строками (string.H) (см. Пособие)
. Функции стандартной библиотеки языка с для работы с файлами (stdio.H) (см. Пособие)