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

[SOLUCIONADO] Obtener datos de una función recursiva

Estas en el tema de Obtener datos de una función recursiva en el foro de C/C++ en Foros del Web. Hola: Me da que este problema debe de ser una de esas cosas que no son muy complicadas, pero el caso es que soy incapaz ...
  #1 (permalink)  
Antiguo 28/01/2014, 05:25
 
Fecha de Ingreso: septiembre-2010
Mensajes: 494
Antigüedad: 13 años, 6 meses
Puntos: 10
Obtener datos de una función recursiva

Hola:

Me da que este problema debe de ser una de esas cosas que no son muy complicadas, pero el caso es que soy incapaz de hacerlo.

Bueno, se trata de que tengo una función recursiva que uso para recorrer todos los nodos de un grafo.

Pero lo que no consigo es usar esa función desde fuera, para ir obteniendo cada nodo y poder tratarlo. Ya sea para modificar su valor, para mostrarlo, etc.

¿Alguien me puede ayudar?
Gracias como siempre
  #2 (permalink)  
Antiguo 28/01/2014, 05:49
 
Fecha de Ingreso: junio-2008
Ubicación: Seattle, USA
Mensajes: 733
Antigüedad: 15 años, 10 meses
Puntos: 61
Respuesta: Obtener datos de una función recursiva

Sugiero agregar a la funcion recursiva un parametro adicional, que sea un puntero a una funcion que realiza lo que quieres hacer con cada nodo. Esto no es evidente en la funcion recursiva. Es como una solucion generica a este nivel. Los detalles estan en la implementacion de la funcion que será pasada como parametro.

Código C++:
Ver original
  1. void funcionRecursiva( Nodo* pnodo, void (*pfunc)( Nodo* ) )
  2. {
  3.     //...
  4.  
  5.     // cuando sea necesario,
  6.     // en medio de la funcion recursiva, invocar la funcion pfunc
  7.     pfunc( pnodo );
  8.  
  9.     // ...
  10. }

La funcion puede hacer lo que quieras, por ejemplo imprimir

Código C++:
Ver original
  1. void imprimirNodo( Nodo* pnodo )
  2. {
  3.    // se me ocurre que los > 100 solo pueden imprimirse
  4.    if( pnodo->valor > 100 )  
  5.    {
  6.         cout << pnodo->valor << " ";
  7.    }
  8. }
y luego invocar la funcion recursiva asi:

Código C++:
Ver original
  1. int main()
  2. {
  3.     Nodo* grafo = construirGrafo();
  4.  
  5.     funcionRecursiva( grafo, imprimirNodo );
  6.     return 0;
  7. }

Si necesitas otras funciones, que hagan otra cosa con cada nodo,
basta definirlas con distinto nombre e invocarlas usando el 2do parametro de la funcion.

Código C++:
Ver original
  1. void ponerEnCero( Nodo* pnodo )
  2. {
  3.     pnodo->valor = 0;
  4. }
  5.  
  6. // ... en alguna parte, donde se haga necesario
  7.       funcionRecursiva( grafo, ponerEnCero );
__________________
Visita mi perfil en LinkedIn
  #3 (permalink)  
Antiguo 28/01/2014, 07:37
 
Fecha de Ingreso: septiembre-2010
Mensajes: 494
Antigüedad: 13 años, 6 meses
Puntos: 10
Respuesta: Obtener datos de una función recursiva

Genial como siempre, CalgaryCorpus.

Muchas gracias por la respuesta tan completa, con la solución y el ejemplo.

Saludos!!

Etiquetas: recursiva
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 13:19.