Рекурсивные функцииRecursive Functions

Любая функция в программе на языке C может вызываться рекурсивно, т. е. может вызывать сама себя.Any function in a C program can be called recursively; that is, it can call itself. Число рекурсивных вызовов ограничено размером стека.The number of recursive calls is limited to the size of the stack. Сведения о параметрах компоновщика, определяющих размер стека, см. в описании параметра компоновщика /STACK (распределения стека).See the /STACK (Stack Allocations) linker option for information about linker options that set stack size. При каждом вызове функции для параметров и переменных auto и register выделяется новая память, чтобы не перезаписывались их значения в предыдущих (незаконченных) вызовах.Each time the function is called, new storage is allocated for the parameters and for the auto and register variables so that their values in previous, unfinished calls are not overwritten. Параметры доступны непосредственно только экземпляру функции, в котором они были созданы.Parameters are only directly accessible to the instance of the function in which they are created. Последующим экземплярам функции предыдущие параметры непосредственно недоступны.Previous parameters are not directly accessible to ensuing instances of the function.

Обратите внимание, что для переменных, объявленных с описателем static , новая память при новом рекурсивном вызове не требуется.Note that variables declared with static storage do not require new storage with each recursive call. Их память существует в течение времени жизни программы.Their storage exists for the lifetime of the program. При каждой ссылке на такую переменную осуществляется доступ к той же области памяти.Each reference to such a variable accesses the same storage area.

ПримерExample

В следующем примере демонстрируются рекурсивные вызовы.This example illustrates recursive calls:

int factorial( int num );      /* Function prototype */

int main()
{
    int result, number;
    .
    .
    .
    result = factorial( number );
}

int factorial( int num )      /* Function definition */
{
    .
    .
    .
    if ( ( num > 0 ) || ( num <= 10 ) )
        return( num * factorial( num - 1 ) );
}

См. такжеSee also

Вызовы функцийFunction Calls