3° Anno TEORIA 7. Metodologie di progettazione e programmazione | Page 24

6 . Metodologia top-down e sottoprogrammi Versione 5.0 – Aprile 2023
Per maggiore chiarezza ipotizziamo di volere calcolare il valore della chiamata ricorsiva Fattoriale ( 5 ) ( che corrisponde in matematica a 5 !) e schematizziamo la sequenza dei passaggi :
Il programma chiamante invoca la funzione Fattoriale per calcolare il valore di 5 ! ossia con un ’ istruzione di chiamata del tipo f � Fattoriale ( 5 ) ( il valore 5 è il valore del parametro attuale )
Il risultato ottenuto alla fine del procedimento ricorsivo è che la variabile f del programma chiamante vale 120 ossia il valore di 5 !
1 ° passaggio ricorsivo : fatt � 5 * Fattoriale ( 4 ) 5 ° calcolo : 5 * 24 = 120
2 ° passaggio ricorsivo : fatt � 4 * Fattoriale ( 3 ) 4 ° calcolo : 4 * 6 = 24
3 ° passaggio ricorsivo : fatt � 3 * Fattoriale ( 2 ) 3 ° calcolo : 3 * 2 = 6
4 ° passaggio ricorsivo : fatt � 2 * Fattoriale ( 1 ) 2 ° calcolo : 2 * 1 = 2
5 ° passaggio ricorsivo : fatt � 1 * Fattoriale ( 0 ) 1 ° calcolo : 1 * 1 = 1
6 ° passaggio ricorsivo : fatt � 1 Poiché n = 0 allora fattoriale vale 1

( condizione di terminazione )

Questo processo ricorsivo così schematizzato viene gestito per mezzo della pila delle attivazioni o stack di cui abbiamo già parlato in precedenza , ricordando che ad ogni invocazione del sottoprogramma ricorsivo viene salvato nello stack l ’ indirizzo dell ’ istruzione cui ritornare che nel nostro caso coincide con l ’ istruzione di moltiplicazione ( in grassetto )
fatt � num * Fattoriale ( num -1)
Vediamo in dettaglio cosa succede quando il programma chiamante invocherà la funzione Fattoriale attraverso una chiamata del tipo
…. f � Fattoriale ( 5 ) ….
Il valore del parametro attuale ( costante intera ) trasferito al parametro formale num è 5 .
Attivata la funzione viene eseguita l ’ istruzione fatt � num * Fattoriale ( num – 1 ) che non può essere eseguita e risolta direttamente in quanto contiene una nuova chiamata allo stesso sottoprogramma ( procedura ricorsiva ).
Viene memorizzato nella pila delle attivazioni l ’ indirizzo dell ’ istruzione di ritorno che nel nostro caso è l ’ istruzione di moltiplicazione contenuta nell ’ istruzione . fatt � num * Fattoriale ( num – 1 )
Autore : Rio Chierego ( email : riochierego @ libero . it - sito web : www . riochierego . it )
Pag . 24