1
Fork 0
mirror of https://github.com/Steffo99/appunti-magistrali.git synced 2024-11-25 03:34:17 +00:00
appunti-steffo/2 - Algoritmi e strutture dati/07 - Divide et Impera.md

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)