Salve,
Inizierei introducendo il concetto del calcolo di un numero fattoriale:
Un numero fattoriale è il risultato della moltiplicazione di tutti i numeri naturali che lo precedono, comprendendo il numero stesso ed escludendo lo zero.
Ora, il modo più semplice, come probabilmente già sai, è quello di usare la cosiddetta
Ricorsione; in ambito informatico la un algoritmo ricorsivo è una "chiamata" (o riferimento) all'algoritmo stesso con l'aggiunta di dati semplici, usati per elaborare un eventuale risultato.
In parole povere: un algoritmo che richiama se stesso.
I due esempi più classici sono la funzione
Fibonacci e il
Fattoriale, come nel tuo caso.
Proverò a spiegarti nella maniera più esaustiva possibile il calcolo del fattoriale:
Step 1:
Alla prima chiamata della funzione abbiamo la variabile
n inizializzata a 3 (per esempio);
3 è indiscutibilmente maggiore di 2, per tanto eseguirà l'else, quindi andrà a restituire una moltiplicazione che ha come fattori il 3 e il fattoriale di 2.
Uno schema grafico sarebbe:
Risultato = fattoriale(3)
|_ 3 * fattoriale(2)
Step 2:
Alla seconda chiamata (fatta dalla funzione stessa, eseguita allo step 1), avremo la variabile
n inizializzata a "n-1", ovvero 2;
2 non è minore di 2, quindi va eseguito anche in questo step l'else, che restituirà la moltiplicazione tra 2 e fattoriale di 1.
Lo schema ora sarebbe:
Risultato = fattoriale(3)
|_ 3 * fattoriale(3-1)
|_ 2 * fattoriale(2-1)
Step 3:
A questo punto, alla terza chiamata, abbiamo la nostra
n inizializzata ad "n-1", quindi 1;
1 è minore di 2, dunque, andremo ad eseguire l'if, che restituirà semplicemente 1.
A questo punto lo schema finale sarebbe:
Risultato = fattoriale(3)
|_ 3 * fattoriale(3-1) #2
|_ 2 * fattoriale(2-1) #1
|_ 1
Solo adesso, dopo essere arrivato alla fine dello schema, il programma inizierà a calcolare il risultato finale, partendo dal basso:
Step 4:
Risultato = fattoriale(3)
|_ 3 * fattoriale(3-1) #2
|_ 2 * 1
Step 5:
Risultato = fattoriale(3)
|_ 3 * 2
Step 6:
Risultato = 6
### FINE ###