Funciones recursivasRecursive Functions

En un programa de C, se puede llamar a cualquier función de forma recursiva, es decir, cualquier función se puede llamar a sí misma.Any function in a C program can be called recursively; that is, it can call itself. El número de llamadas recursivas viene limitado por el tamaño de la pila.The number of recursive calls is limited to the size of the stack. Vea la opción del vinculador /STACK (asignaciones de pila) para obtener información sobre las opciones del vinculador que establecen el tamaño de la pila.See the /STACK (Stack Allocations) linker option for information about linker options that set stack size. Cada vez que se llama a la función, se asigna nuevo almacenamiento para los parámetros y para las variables auto y register para que no se sobrescriban sus valores en llamadas anteriores que no han finalizado.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. Los parámetros solo son accesibles directamente para la instancia de la función en la que se crean.Parameters are only directly accessible to the instance of the function in which they are created. Los parámetros anteriores no son directamente accesibles para las siguientes instancias de la función.Previous parameters are not directly accessible to ensuing instances of the function.

Tenga en cuenta que las variables declaradas con almacenamiento static no requieren nuevo almacenamiento con cada llamada recursiva.Note that variables declared with static storage do not require new storage with each recursive call. Su almacenamiento existe durante la vigencia del programa.Their storage exists for the lifetime of the program. Cada referencia a estas variables accede a la misma área de almacenamiento.Each reference to such a variable accesses the same storage area.

EjemploExample

En este ejemplo se ilustran las llamadas recursivas: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 ) );
}

Vea tambiénSee also

Llamadas de funciónFunction Calls