Funzioni ricorsiveRecursive Functions

Qualsiasi funzione in un programma C può essere chiamata in modo ricorsivo, vale a dire che può chiamare se stessa.Any function in a C program can be called recursively; that is, it can call itself. Il numero di chiamate ricorsive è limitato alla dimensione dello stack.The number of recursive calls is limited to the size of the stack. Per informazioni sulle opzioni del linker che impostano la dimensione dello stack, vedere l'opzione del linker /STACK in /STACK (Stack Allocations) (/STACK (allocazioni di stack)).See the /STACK (Stack Allocations) (/STACK) linker option for information about linker options that set stack size. Ogni volta che la funzione viene chiamata, viene allocata altra memoria per i parametri e per le variabili auto e register, in modo da non sovrascrivere i valori di queste nelle chiamate precedenti non completate.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. I parametri sono solo accessibili direttamente all'istanza della funzione in cui vengono creati.Parameters are only directly accessible to the instance of the function in which they are created. I parametri precedenti non sono accessibili direttamente a istanze che seguono la funzione.Previous parameters are not directly accessible to ensuing instances of the function.

Tenere presente che le variabili dichiarate con memoria statica non richiedono nuova memoria per ogni chiamata ricorsiva.Note that variables declared with static storage do not require new storage with each recursive call. La relativa archiviazione disponibile esiste per la durata del programma.Their storage exists for the lifetime of the program. Ogni riferimento a tale variabile accede alla stessa area di archiviazione.Each reference to such a variable accesses the same storage area.

EsempioExample

In questo esempio sono illustrate le chiamate ricorsive: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 ) );  
}  

Vedere ancheSee Also

Chiamate di funzioneFunction Calls