Функция в языке программирования Си может быть рекурсивной, т.е. может вызывать сама себя. Каждый раз, когда функция вызывает себя, на стек помещается новый кадр. Функция должна вызывать себя условно, например, внутри оператора if, иначе бесконечная рекурсия переполнит стек.
Пример 1
void printd (int n)
{
  int i;

  if (n < 0)
    {
     putchar ('-');
     n = -n;
    }
  if ( (i = n/10) != 0)
     printd(i);
  putchar(n % 10 + '0');
}
Рис. 1.  Рекурсивный поток управления через вызовы функции printd()
В прим. 1 в функцию printd() передано значение 543. Эффект этой функции состоит в том, что printd() рекурсивно разбивает значение на составляющие его цифры и затем печатает эти цифры.