Estoy de acuerdo con pgaur y rickerbh, la complejidad recursiva de fibonacci es O (2 ^ n).
Llegué a la misma conclusión con un razonamiento bastante simplista, pero creo que sigue siendo válido.
Primero, se trata de averiguar cuántas veces se llama la función recursiva de Fibonacci (F () de ahora en adelante) al calcular el enésimo número de Fibonacci. Si se llama una vez por número en la secuencia de 0 a n, entonces tenemos O (n), si se llama n veces por cada número, entonces obtenemos O (n * n) u O (n ^ 2), y así.
Entonces, cuando se llama a F () para un número n, el número de veces que se llama a F () para un número dado entre 0 y n-1 crece a medida que nos acercamos a 0.
Como primera impresión, me parece que si lo ponemos de manera visual, dibujando una unidad por cada vez que se llama F () para un número dado, obtenemos una especie de forma piramidal (es decir, si centramos las unidades horizontalmente) ) Algo como esto:
n *
n-1 **
n-2 ****
...
2 ***********
1 ******************
0 ***************************
Ahora, la pregunta es, ¿qué tan rápido aumenta la base de esta pirámide a medida que n crece?
Tomemos un caso real, por ejemplo F (6)
F(6) * <-- only once
F(5) * <-- only once too
F(4) **
F(3) ****
F(2) ********
F(1) **************** <-- 16
F(0) ******************************** <-- 32
Vemos que F (0) se llama 32 veces, que es 2 ^ 5, que para este caso de muestra es 2 ^ (n-1).
Ahora, queremos saber cuántas veces se llama a F (x), y podemos ver el número de veces que se llama a F (0) es solo una parte de eso.
Si movemos mentalmente todos los * de las líneas F (6) a F (2) a la línea F (1), vemos que las líneas F (1) y F (0) ahora tienen la misma longitud. Lo que significa que se llama a F () cuando n = 6 es 2x32 = 64 = 2 ^ 6.
Ahora, en términos de complejidad:
O( F(6) ) = O(2^6)
O( F(n) ) = O(2^n)