mirror of
https://github.com/Steffo99/appunti-magistrali.git
synced 2024-11-25 11:34:18 +00:00
1.2 KiB
1.2 KiB
Divide et impera
Un modo efficace per risolvere un problema è di usare il metodo divide et impera (et combina).
- Divide: Divido il problema in tanti sottoproblemi.
- Impera: Risolvo indipendentemente dal resto ciascuno dei sottoproblemi.
- Combina: Combino i risultati dei sottoproblemi per risolvere il problema principale.
Ricorsione
Un algoritmo (o funzione) si dice ricorsivo quando durante l'esecuzione richiama sè stesso.
Dato che tutti gli algoritmi devono avere termine entro un tempo finito, se scriviamo una funzione ricorsiva è fondamentale finire con un caso base, che non chiami ulteriormente la ricorsione.
Se esiste una funzione ricorsiva, allora esiste sempre una funzione iterativa che darà lo stesso risultato.
Sul pratico, una funzione ricorsiva tipicamente è più costosa del suo equivalente iterativo: se possibile, quindi, la ricorsione andrebbe evitata.
Pseudocodice di esempio
def fattoriale(n):
# Caso base; la ricorsione finisce e dà un risultato fisso
if n <= 1:
return 1
# Caso ricorsivo; la funzione restituisce il risultato di sè stessa (ma con parametri diversi)
else:
return n * fattoriale(n - 1)