Liste

Gianni911
ragazzi qualcuno sarebbe cosi gentile da spiegarmi come si comporta questa funzione???
Dovrebbe stampare le lettere minuscole di una lista passata,ma la lista deve essere stampata al contrario...
non riesco a capire come si comporta la ricorsione..

void stampa(elem* & L){
if(L==NULL)return;
if(L!=NULL) stampa(L->pun);
if((L->c>='a') && (L->c<='z'))cout<c<< " ";}

grazie a tutti
:D

Risposte
xsl
E' un tipico esempio di ricorsione non in coda, perciò le istruzioni per stampare finiscono nello stack e dunque verranno eseguite secondo l'ordine inverso.
In questo modo, nello standard output, ottieni la visita inversa della lista (almeno degli elementi che soddisfano la condizione)..

Gianni911
scusami potresti spiegarmelo in modo più ampliato oppure indirizzarmi a qualche sito che tratti questo caso in modo completo??
Vorrei capire come sfruttarlo altre volte a mio favore...
grazie

xsl
"Gianni91":
scusami potresti spiegarmelo in modo più ampliato

Quale concetto ti è oscuro?

Gianni911
non ho capito bene perchè succede questo,lo so sembra un po' idiota come cosa,ma credevo che facesse solo le prime due righe di codice,e poi uscisse o al massimo stampava solo una volta..

xsl
"Gianni91":
non ho capito bene perchè succede questo

In questo caso le chiamate ricorsive allocano la memoria Stack, alla quale si accede secondo la politica LIFO (Last In First Out).
Cioè, l'ultima istruzione che viene locata è quella a dover essere estratta per prima.

Se tu implementassi la tua funzione usando una Pila, avresti modo di simulare cosa succede più o meno nello Stack..

Gianni911
ma nelle funzioni ricorsive "classiche",si accede allo stack secondo FIFO(First in First Out)??
Potresti linkarmi qualcosa sulla ricorsione non in coda??...sono poco informato sull'argomento

Gianni911
ho trovato questo su wikipedia..

Quando invece la ricorsione non è l'ultima istruzione della procedura (ricorsione non in coda) si può optare per una soluzione che preveda l'utilizzo di uno stack di supporto che permette di salvare i valori delle chiamate ricorsive e tramite un ciclo while simulare in modo del tutto banale ciò che fa lo stack di sistema.

quindi le chiamate vengono salvate in uno stack di supporto alla quale si accede secondo la politica LIFO (Last In First Out)(come hai detto tu)..giusto??

xsl
"Gianni91":
giusto??

Si.

Gianni911
perfetto grazie

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.