Hola a todos, ¿Cómo va?. Soy nuevo acá y decidí consultar a los que mas saben a ver si pueden darme una mano. En realidad es una simple duda que tengo que me surgió hoy mientras estaba estudiando recursividad para la facultad.
Mi duda surge en lo siguiente, cuando la función recursiva llega al final de la lista, asigna a l1 (la lista) el valor de l2 que es NULL (a l2 se le asigna valor en el main). Como ven en el encabezado de la función, el parametro l1 tiene '&' por lo tanto va por dirección, es decir, que cuando la función detecto l1 == NULL, le asigno el valor de l2. Cuando la función va a seguir con el desarrollo de la misma de los llamados que quedaron pendientes, ¿por qué motivo l1 tiene el valor de cuando se llamó en vez de tener NULL? Ya que según lo que yo aprendí si ese parámetro se pasa por dirección, cuando vuelva a atender las instrucciones pendientes el parámetro l1 debería tener el valor que se le asignó.
Espero que se entienda mi pregunta, sino cualquier cosa intentaré explicarlo mejor.
Es mas una duda conceptual, y quisiera entender el porqué.
Muchas gracias de antemano.
Código (cpp) [Seleccionar]
typedef struct nodo{
char info;
nodo* sig;
};
void TOBA(nodo* l1, nodo*& l2);
Código (cpp) [Seleccionar]
void main(){
nodo nodo1;
nodo nodo2;
nodo nodo3;
nodo nodo4;
nodo nodo5;
nodo aux;
nodo* pnodo1;
nodo* pnodo2;
nodo* pnodo3;
nodo* pnodo4;
nodo* pnodo5;
nodo* paux;
pnodo1 = &nodo1;
pnodo2 = &nodo2;
pnodo3 = &nodo3;
pnodo4 = &nodo4;
pnodo5 = &nodo5;
paux = &aux;
pnodo1->info = 'a';
pnodo1->sig = pnodo2;
pnodo2->info = 'e';
pnodo2->sig = pnodo3;
pnodo3->info = 'i';
pnodo3->sig = pnodo4;
pnodo4->info = 'o';
pnodo4->sig = pnodo5;
pnodo5->info = 'u';
pnodo5->sig = NULL;
paux = NULL;
TOBA(pnodo1, paux);
getchar();
}
Código (cpp) [Seleccionar]
void TOBA(nodo*& l1, nodo*& l2){
nodo* x;
if(l1 != NULL){
TOBA(l1->sig,l2);
x = l1;
l1 = l1->sig;
x ->sig = l2;
l2 = x;
}
else{
l1 = l2;
}
}
Mi duda surge en lo siguiente, cuando la función recursiva llega al final de la lista, asigna a l1 (la lista) el valor de l2 que es NULL (a l2 se le asigna valor en el main). Como ven en el encabezado de la función, el parametro l1 tiene '&' por lo tanto va por dirección, es decir, que cuando la función detecto l1 == NULL, le asigno el valor de l2. Cuando la función va a seguir con el desarrollo de la misma de los llamados que quedaron pendientes, ¿por qué motivo l1 tiene el valor de cuando se llamó en vez de tener NULL? Ya que según lo que yo aprendí si ese parámetro se pasa por dirección, cuando vuelva a atender las instrucciones pendientes el parámetro l1 debería tener el valor que se le asignó.
Espero que se entienda mi pregunta, sino cualquier cosa intentaré explicarlo mejor.
Es mas una duda conceptual, y quisiera entender el porqué.
Muchas gracias de antemano.