Dopo aver analizzato il problema e individuati i 3 algoritmi discutiamo la loro complessità in tempo.
Algoritmo ricorsivo
Il tempo di attesa può essere considerato proporzionale al numero di chiamate ricorsive
- T(1) = 1
- T(2) = 1
- T(3) = 1 + T(2)+T(1) = 1 + 1 + 1 = 3 (
) - T(4) = 1 + T(3)+T(2) = 1 + 3 + 1 = 5 (
) - T(5) = 1 + T(4)+T(3) = 1 + 5 + 3 = 9 (
) - T(6) = 1 + T(5)+T(4) = 1 + 9 + 5 = 15 (
) - T(7) = 1 + T(6)+T(5) = 1 + 15 + 9 = 25 (
) - T(8) = 1 + T(7)+T(6) = 1 + 25 + 15 = 41 (
) - …
- T(n) =

La successione del numero di chiamate cresce come i numeri stessi di Fibonacci.
Si può dimostrare che i numeri di Fibonacci crescono in modo esponenziale.
Quindi
=
~ F(n) ~ ![]()
L’algoritmo ricorsivo per il calcolo dell’n-esimo numero di Fibonacci ha complessità in tempo esponenziale!
Algoritmo iterativo
Si tratta di un algoritmo con un’iterazione semplice, senza chiamate ricorsive, quindi
- T(n) =
.
L’algoritmo iterativo per il calcolo dell’n-esimo numero di Fibonacci ha complessità lineare!
Con formula
Se consideriamo costante il tempo necessario per svolgere le singole operazioni presenti nella formula allora T(n) = c.
Per n molto grande il tempo per l’elevamento a potenza dipende dal logaritmo di n.
Conclusioni
| Metodo | Pro | Contro | Quando? |
|---|---|---|---|
| Ricorsivo | Formulazione elegante | Numero di chiamate esponenziale! | Per n piccolo |
| Iterativo | Formulazione semplice Numero di operazioni lineare Operazioni elementari | Sempre… | |
| Con formula | Ha un valore storico Numero di operazioni costante (logaritmico…) | Difficile da ricordare Numeri irrazionali | Per n molto grande |