Sei sulla pagina 1di 3

RICORSIONE

È un metodo per la risoluzione di problemi, ovvero, è una maniera per progettare algoritmi. Calcola la
soluzione di un’istanza di un problema sfruttando una soluzione per un’istanza “più piccola” dello
stesso problema e poi risolve l’intera istanza tramite lo stesso algoritmo.

FATTORIALE

Dati in ingresso: un intero n


Pre- condizioni: n è un intero ≥ 1
Dati in uscita: intero fatt
Post-condizioni: fatt è pari al fattoriale di n, ovvero fatt è pari a n!=1*2*3*…*n.

È un problema di accumulazione:

Per definizione n! = 1*2*3*…*(n-2)*(n-1)*n.

Sempre per definizione (n-1)! = 1*2*3*…*(n-2)*(n-1).

Quindi n! = 1*2*3*…*(n-2)*(n-1) * n.

(n-1)!
Ovvero il fattoriale di un numero n ≥ 2 è pari ad n * (n-1)!. Es. il fattoriale di 123 è pari a 123*122!

Per definizione il fattoriale di 1 è pari a 1.

Un algoritmo ricorsivo per Fattoriale: RECFATT


OSSERVAZIONE

Un algoritmo ricorsivo deve fornire direttamente la soluzione al problema per valori o dimensioni di
input “piccoli”, questi vengono chiamati casi base dell’algoritmo ricorsivo. Ad esempio n = 1
rappresenta il caso base dell’algoritmo.

Quando l’input non corrisponde a un caso base, l’algoritmo “ricorre” ovvero calcola il risultato
sfruttando il risultato ottenuto dal caso base, questo passaggio si chiama “passo ricorsivo”. Es. valori
n >1.

La finitezza di un algoritmo ricorsivo viene raggiunta garantendo che ogni sequenza di esecuzioni
dell’algoritmo arrivi ad un caso base.

FUNZIONI RICORSIVE

Traducendo un algoritmo ricorsivo una funzione otteniamo una funzione ricorsiva.

Una funzione è ricorsiva se invoca se stessa. La funzione avrà casi base, in cui il valore da restituire
viene calcolato in maniera triviale, e dei passi ricorsivi in cui il valore da restituire viene calcolato
sfruttando il valore restituito dalla funzione stessa su un input “più piccolo”.

ITERAZIONE O RICORSIONE?

Anche se ogni funzione ricorsiva può essere espressa in forma iterativa, molto spesso è più semplice e
chiaro definire una funzione in maniera ricorsiva piuttosto che iterativa.

D’altra parte la ricorsione può essere più costosa (in termini di memoria) in quanto per ogni
invocazione ricorsiva di una funzione viene allocata un’area di memoria nella pila di attivazione.

RICORSIONE E INDUZIONE

La ricorsione è una tecnica algoritmica che ha le sue radici nell’induzione matematica. Quest’ultima è
una tecnica usata per una moltitudine di scopi: definire insiemi, funzione, dimostrare teoremi, ecc.

DEFINIZIONE INSIEMI

Un insieme è definito in maniera induttiva se l’appartenenza di un elemento all’insieme è definita in


base all’appartenenza di altri elementi all’insieme.

DEFINIZIONE DI FUNZIONI

Una funzione è definita in maniera induttiva se è definita in termini in se stessa.

Sono due funzioni definite in maniera induttiva. In questo contesto la parola induzione e la parola
ricorsione sono sinonimi, anche se alla seconda viene generalmente data un’accezione algoritmica,
relativa al calcolo del valore della funzione stessa.
FUNZIONE NUMERO DI PERMUTAZIONI