Рекурсивной называется функция, которая получает результат, вызывая сама себя. Последовательные рекурсивные вызовы:
1) должны передавать различные аргументы;
2) должны достичь предела или условия, при котором функция прекращает вызывать себя.
Эти два простых правила предотвращают рекурсивную функцию от зацикливания. При этом рекурсия – это такая форма повторения, которая не использует формально какой-либо цикл.
Пример рекурсивной функции для вычисления факториала:
long int Fact(int X)
{
if(X == 1)
return 1; // окончание рекурсии
else
return X * Fact(X – 1); // рекурсивный вызов
}
//---------------------------------
void main()
{
int k = 3;
int F = Fact(k);
printf("\n Факториал %d равен %d", k, F);
getch();
}
Наглядно работу рекурсивной функции поясняет следующий рисунок:
Очевидно, что в данном случае память компьютера используется неэффективно, поскольку аналогичный результат можно получить быстрее и проще, накапливая произведение с помощью цикла for. При этом в отличие от рекурсивного алгоритма для хранения результата достаточно иметь всего одну переменную. Однако для некоторых алгоритмов всё же удобнее использовать именно рекурсию, например, для алгоритма разбора арифметического выражения.
|
|
5.7 Новые особенности функций в C++
C++ предлагает новые возможности функций, которых нет в языке С. Эти возможности позволяют назначать аргументы по умолчанию и определять функции, которые имеют одно и то же название (имя).