Liste
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
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<
grazie a tutti

Risposte
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)..
In questo modo, nello standard output, ottieni la visita inversa della lista (almeno degli elementi che soddisfano la condizione)..
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
Vorrei capire come sfruttarlo altre volte a mio favore...
grazie
"Gianni91":
scusami potresti spiegarmelo in modo più ampliato
Quale concetto ti è oscuro?
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..
"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..
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
Potresti linkarmi qualcosa sulla ricorsione non in coda??...sono poco informato sull'argomento
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??
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??
"Gianni91":
giusto??
Si.
perfetto grazie