Funkcje rekursywneRecursive Functions

Każda funkcja w programie C może być wywoływana cyklicznie; oznacza to, że może wywoływać sam siebie.Any function in a C program can be called recursively; that is, it can call itself. Liczba wywołań cyklicznych jest ograniczona do rozmiaru stosu.The number of recursive calls is limited to the size of the stack. Aby uzyskać informacje na temat opcji konsolidatora, które ustawiają rozmiar stosu, zobacz opcję konsolidatora /STACK stosu .See the /STACK (Stack Allocations) linker option for information about linker options that set stack size. Za każdym razem, gdy funkcja jest wywoływana, nowy magazyn jest przypisywany do parametrów i auto dla register zmiennych i, tak aby ich wartości w poprzednich, nieukończonych wywołaniach nie były zastępowane.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. Parametry są dostępne tylko bezpośrednio dla wystąpienia funkcji, w której zostały utworzone.Parameters are only directly accessible to the instance of the function in which they are created. Poprzednie parametry nie są bezpośrednio dostępne dla wynikający z tego, wystąpienia funkcji.Previous parameters are not directly accessible to ensuing instances of the function.

Należy zauważyć, że zmienne zadeklarowane za pomocą static magazynu nie wymagają nowego magazynu przy każdym wywołaniu cyklicznym.Note that variables declared with static storage do not require new storage with each recursive call. Ich magazyn istnieje na okres istnienia programu.Their storage exists for the lifetime of the program. Każde odwołanie do tej zmiennej uzyskuje dostęp do tego samego obszaru magazynu.Each reference to such a variable accesses the same storage area.

PrzykładExample

Ten przykład ilustruje cykliczne wywołania: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 ) );
}

Zobacz teżSee also

Wywołania funkcjiFunction Calls