a recursividade nesse caso particular, se torna extremamente lenta, pq a calculos duplicados ocorrendo por todo o código…
por exemplo…
calcularFibonacci(5);
isso vai invocar o seguinte
1 - calcularFibonacci(4)
2 - calcularFibonacci(3)
para somar esses dois valores
o numero 1 vai invocar
3 - calcularFibonacci(3)
4 - calcularFibonacci(2)
o numero 2 vai invocar
5 - calcularFibonacci(2)
6 - calcularFibonacci(1)
o numero 3 vai invocar
7 - calcularFibonacci(2)
8 - calcularFibonacci(1)
o numero 4 vai invocar
9 - calcularFibonacci(1)
10 - calcularFibonacci(0)
o numero 5 vai invocar
11 - calcularFibonacci(1)
12 - calcularFibonacci(0)
o numero 6 vai dar a resposta direto = 1
o numero 7 vai calcular
13 - calcularFibonacci(1)
14 - calcularFibonacci(0)
o numero 8 vai dar a resposta direto = 1
o numero 9 vai dar a resposta direto = 1
o numero 10 vai dar a resposta direto = 0
o numero 11 vai dar a resposta direto = 1
o numero 12 vai dar a resposta direto = 0
o numero 13 vai dar a resposta direto = 1
o numero 14 vai dar a resposta direto = 0
…
como vc pode ver… para o numero 5, há 14 chamadas do proprio método…
calcularFibonacci(4) é invocado 1 vez
calcularFibonacci(3) é invocado 2 vezes
calcularFibonacci(2) é invocado 3 vezes
calcularFibonacci(1) é invocado 5 vezes
calcularFibonacci(0) é invocado 3 vezes
fica claro assim, que usando a recursividade o método é muito lento, devido as varias chamadas