В языке C функции могут вызывать сами себя. Функция называется рекурсивной, если во время ее работы возникает ее повторный вызов, либо непосредственно, либо косвенно, путем цепочки вызовов других функций.
Прямой рекурсией является вызов функции внутри тела этой функции. Косвенной рекурсией является рекурсия, осуществляющая рекурсивный вызов функции посредством цепочки вызова других функций. Все функции, входящие в цепочку, тоже считаются рекурсивными.
Вызов рекурсивной функции создаёт в стеке новые копии локальных переменных и параметров. Из рекурсивной функции необходимо предусмотреть выход. Компилятор допускает любое число рекурсивных вызовов, однако слишком большое число рекурсивных вызовов может вызвать переполнение стека. Наибольшее число рекурсивных вызовов связано с объёмом в байтах передаваемых функции фактических параметров. Теоретически чем меньше объём передаваемых параметров, тем большее число рекурсивных вызовов, не приводящих к переполнению стека, возможно.
Пример 11
int factorial(int n)
{
if(n==1)
return 1;
return factorial(n-1)*n;
}
void main(void)
{
printf("%d",factorial(8));
}
На экране будет напечатано: 40320