función en c

Iniciado por fernaEDLP, 4 Enero 2019, 21:41 PM

0 Miembros y 1 Visitante están viendo este tema.

fernaEDLP

hola gente bella, espero que anden bien, felicidades en este nuevo año. Tengo una duda con una  una función en c que todavía no puedo entender bien, es una funcion que invierte una cadena ingresada, el código es este, es RECURSIVA.


#include <stdio.h>
#include <stdlib.h>
void imprimir_ite(char *pcad);



int main()
{
    char cad[80];
    printf("ingrese la cadena de caracteres\n");
    gets(cad);
    imprimir_ite(cad);
    return 0;
}


void imprimir_ite(char *pcad)
{
    if(*pcad=='\0')
    {
        return;
    }
    else
    {
         imprimir_ite(pcad+1);
         printf("%c",*pcad);

    }
}


Entiendo la parte inicial del código, o sea ingreso la cadena "hola" por ejemplo, entonces comienza a preguntarse si cada caracter es igual al final o sea '\0' , hace eso y siempre entra a la recursividad antes de imprimir nada, lo que no entiendo es el final, cuando encuentra '\0' la sentencia return? que hace?, lei que provoca una salida inmediata de la funcion hacia el punto donde fue llamada?, o sea cuando es que se empieza a imprmir el caracter a?

MAFUS

Sobre lo que estás preguntando se llama guarda y es la condición por la cual debe terminar la recursividad. Si no existiera estaría entrando en la función hasta quedarse el programa sin memoria.

En las funciones hay dos formas de terminarlas:
1. Cuando llegan al final.
2. Cuando encuentran una sentencia return.

Lo que va a pasar cuando se llegue al final de la cadena es que la función va a regresar sin hacer nada dándole el control a la llamante.
Esa función continuará después de la llamada y escribirá el carácter, en este caso es el último de la cadena. Hecho esto llegará al final y le devolverá el control a su llamante.
Esa función, igual que la anterior, continuará después de la llamada escribiendo el carácter de la cadena, en su caso el penúltimo.
Las funciones irán escribiendo el carácter que les toca y devolviendo el control a su llamante hasta llegar a la primera que, una vez termine, continuará con la ejecución natural del programa.

fernaEDLP