Quote:
Originariamente inviato da tuccio`
lo stack è una parte della memoria riservata alla memoria statica e alle chiamate a funzione, ogni volta che una funzione viene chiamata, viene allocata la memoria di cui necessita nello stack, e quando la chiamata finisce viene liberata (si chiama stack proprio perché funziona con politica lifo)
ad esempio, ogni volta che chiami la funzione fattoriale, viene allocata una nuova variabile risultato (quindi l'indirizzo su cui viene scritto il risultato per n sarà diverso dall'indirizzo su cui lo scrive per n-1)
tutto quello che devi pensare quando scrivi una funzione ricorsiva è:
posso risolvere un problema servendomi della soluzione a un problema "più piccolo" dello stesso tipo, in modo da potermi fermare prima o poi perché conosco la soluzione di un caso base? il funzionamento delle stack, l'albero delle chiamate ti possono aiutare a renderti conto che la cosa funziona
|
Ok.
Mi potete confermare (o smentire) che, di fatto, il calcolo del risultato finale avviene partendo dalla chiamata più interna della ricorsione per, via via, tornare alla prima chiamata?
Cioè che in sostanza il calcolo avviene in una forma simile:
e non
come, magari, potrebbe sembrare inizialmente dato che il valore dell'argomento che passiamo alla funzione. quando chiamata nel nostro codice. è quello più alto (ad esempio 4) per:
Grazie ancora.