Foros del Web » Programación para mayores de 30 ;) » C/C++ »

recursividad

Estas en el tema de recursividad en el foro de C/C++ en Foros del Web. hola de nuevo! tengo una función recursiva en c que no logro entender, a ver si alguien me ayuda! es esta: void f(int a) { ...
  #1 (permalink)  
Antiguo 15/02/2016, 14:32
 
Fecha de Ingreso: enero-2010
Mensajes: 16
Antigüedad: 14 años, 4 meses
Puntos: 0
recursividad

hola de nuevo!

tengo una función recursiva en c que no logro entender, a ver si alguien me ayuda!

es esta:

void f(int a)
{
if (a){
printf("%d",a);
f(a-1);
}
printf("fin");
}

si la llamo asi: "f(4)" me da resultado "4321FinFinFinFinFin", no entiendo el porqué. es como si recordara en cada llamada que no alcanzo la línea "printf("fin")" y al final las hace de golpe?¿

saludos, gracias!
  #2 (permalink)  
Antiguo 15/02/2016, 14:58
Avatar de xKuZz  
Fecha de Ingreso: febrero-2015
Ubicación: nullptr
Mensajes: 183
Antigüedad: 9 años, 2 meses
Puntos: 27
Respuesta: recursividad

Al hacer la llamada recursiva la función NO ha terminado de ejecutarse, lo que ocurre es que una vez llegas al caso que te hace salir de la recursión (a=0) se continúa con la función que te había llamado.

Supón que escribes f(2), entonces lo que ocurre es:
Empieza f(2), escribes 2 en pantalla, se llama f(2-1) = f(1).
Empieza f(1), escribes 1 en pantalla, se llama f(1-1) = f(0)
Empieza f(0), escribes fin, finaliza f(0), por tanto vuelvo a la función que me ha llamado.
Continúo f(1), escribes fin, finaliza f(1), vuelvo a la función que me ha llamado.
Continúo f(2), escribes fin, finaliza f(2), vuelvo a la función que me ha llamado, vuelve al main o a la función que me haya llamado si fuese otra.
  #3 (permalink)  
Antiguo 15/02/2016, 15:54
 
Fecha de Ingreso: enero-2010
Mensajes: 16
Antigüedad: 14 años, 4 meses
Puntos: 0
Respuesta: recursividad

ok, ahora sí!!!! entendido! gracias!

saludos

Etiquetas: int, recursividad
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:06.