Nas aulas anteriores nós aprendemos o conceito de recursão e vimos alguns exemplos. Contudo, será que recursão sempre será eficiente? Nesta aula nós veremos que a recursão pode ser muito custosa para o computador, realizando o mesmo cálculo inúmeras vezes. Quando isso acontece devemos procurar outra forma de resolver o problema.
Na aula anterior nós vimos como calcular um termo da sequência de fibonacci com recursão e este é um ótimo exemplo de algo que não deve ser seguido. Fibonacci recursivo é extremamente custoso para o computador resolver pois ele acaba fazendo o mesmo cálculo diversas vezes.
Lembra da pilha de recursão gerenciada pelo sistema operacional? No fibonacci recursivo nós temos duas chamadas em sequência como pode ser visto no código a seguir.
funcao inteiro fibonacci(inteiro n){
se(n == 1)
retorne 0
senao{
se(n == 2)
retorne 1
senao
retorne fibonacci(n - 1) + fibonacci(n - 2)
}
}
O problema é que cada chamada é independente e não tem acesso à cálculos feitos por outras chamadas separadas, apenas ao valor que é retornado pela chamada imediatamente seguinte. Assim, ao montarmos uma árvore de recursão para este problema, fica evidente a repetição de cálculos, como pode ser visto na fira a seguir.

