1
Fork 0
mirror of https://github.com/Steffo99/unisteffo.git synced 2024-12-01 20:34:18 +00:00
triennale-appunti-steffo/public/materials/year1/algoritmi/07_DivideEtImpera.md

30 lines
1.2 KiB
Markdown
Raw Normal View History

2022-02-03 02:15:39 +00:00
# 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
```python
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)
```