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

[SOLUCIONADO] Duda llamada dos veces a función recursiva

Estas en el tema de Duda llamada dos veces a función recursiva en el foro de C/C++ en Foros del Web. Verán tengo los recorridos de arboles binarios en c, y me surje la duda de cómo se ejecutan las llamadas recursivas. Por ejemplo, dado un ...
  #1 (permalink)  
Antiguo 17/06/2015, 15:44
 
Fecha de Ingreso: mayo-2015
Mensajes: 19
Antigüedad: 9 años, 6 meses
Puntos: 0
Exclamación Duda llamada dos veces a función recursiva

Verán tengo los recorridos de arboles binarios en c, y me surje la duda de cómo se ejecutan las llamadas recursivas. Por ejemplo, dado un árbol binario:

Código:
           A
        /     \
      B         C
    /   \     /   \
   D    E    F     G
Y queriendo recorrerlo en preOrden, es decir, imprimir:
Código:
ABDECFG 
Tengo dudas de como se ejecutan las lineas 4 y 5.
Código C:
Ver original
  1. void preOrden(Arbol raiz){
  2.     if (!raiz) return;
  3.     printf("%c", raiz->info);
  4.     preOrden(raiz->izq);
  5.     preOrden(raiz->der);
  6. }

Por ejemplo: al llegar a la linea 4, se imprimen todos los de la izquierda: ABD, hasta aquí lo entiendo pero ya no se como se imprime E y los siguientes. AYUDA!
  #2 (permalink)  
Antiguo 17/06/2015, 16:25
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 10 años, 1 mes
Puntos: 204
Respuesta: Duda llamada dos veces a función recursiva

Es fácil, el algoritmo imprime el nodo actual, después itera por su rama izquierda y, finalmente, por su rama derecha. En el caso del árbol que has puesto:
  • preOrden(A)
  • Se imprime 'A'
  • preOrden(A->izq) =>preOrden(B)
    • Se imprime 'B'
    • preOrden(B->izq) => preOrden(D)
      • Se imprime 'D'
      • preOrden(D->izq) => NULL
      • preOrden(D->der) => NULL
    • preOrden(B->der) => preOrden(E)
      • Se imprime 'E'
      • preOrden(E->izq) => NULL
      • preOrden(E->der) => NULL
  • preOrden(A->der) => preOrden(C)
    • Se imprime 'C'
    • preOrden(C->izq) => preOrden(F)
      • Se imprime 'F'
      • preOrden(F->izq) => NULL
      • preOrden(F->der) => NULL
    • preOrden(C->der) => preOrden(G)
      • Se imprime 'G'
      • preOrden(G->izq) => NULL
      • preOrden(G->der) => NULL

Luego la secuencia impresa, como puedes ver, será ABDECFG.

Un saludo

Etiquetas: llamada, recursiva, veces
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 07:38.