Scusa, ma hai una lacuna abbastanza grossa sul concetto di ricorsione.Originariamente inviato da iz8eej
è quello che sto cercando di fare![]()
In effetti ci sono delle cose che ho compreso e altre che non mi sono molto chiare.
Ad esempio non mi è chiaro come fa ad iterare la funzione se la ricorsione finisce dopo che ha raggiunto la file della lista.Mi spiego:
Appena interviene la chiamata ricorsiva (nel cosa in cui la lista non è vuota) questa "itera" finchè non arriva allultimo nodo(attraverso il ramo del primo if "if (l->Next == NULL)"), e in questo caso pone *n = 0, oppure a 1 e inizializza la var n.Ma a questo punto la ricorsione è terminata e non ho contato i nodi, come fa a contare il resto ?
grazie.
Allora, quando tu fai una chiamata ricorsiva, semplicemente viene fatto un push sullo stack del processo (non so se hai qualche nozione di sistemi operativi), e il processo inizia a lavorare con questo nuovo spazio di indirizzamento. Praticamente la funzione che hai chiamato diventa un elemento di questo stack e viene posto in cima allo stack, quando la chiamata ricorsiva termina viene fatto un pop e il controllo ritorna alla funzione precedente e riprende l'esecuzione dall'istruzione dopo la chiamata ricorsiva.
Quindi questa funzione chiama ricorsivamente, quando arriva alla fine man mano ritorna indietro nelle chiamate ricorsive, ed effettua le operzioni che deve fare. Non so se sono stato chiaro, ti consiglio di cercare un pò in rete per informarti un pò.
Prova a cominciare da qui:
http://en.wikipedia.org/wiki/Recursi...ter_science%29
http://it.wikipedia.org/wiki/Ricorsione

Rispondi quotando