1029 - Fibonacci, Quantas Chamadas?

Programação dinâmica clássica aplicada ao problema de Fibonacci.

Descrição

Solução

Uma coisa interessante desse problema é como ele explica com detalhes como as chamadas recursivas do algoritmo comumente usado para calcular o k-ésimo número de Fibonacci. Nós vamos usar exatamente essa mesma ideia para calcular não só o número de Fibonacci como normalmente calculamos, mas também para calcular o número de chamadas que o nosso algoritmo vai fazer.

Primeiramente, a recorrência de Fibonacci que todos nós conhecemos

F(0)=0F(1)=1F(i)=F(i1)+F(i2)F(0) = 0 \\ F(1) = 1 \\ F(i) = F(i - 1) + F(i - 2)

que é inclusive a que está no enunciado. Vamos usar essa recorrência para calcular no número de Fibonacci e em conjunto a isso, faremos também a recorrência para o número de chamadas

CF(0)=1CF(1)=1CF(i)=CF(i1)+CF(i2)+1CF(0) = 1 \\ CF(1) = 1 \\ CF(i) = CF(i - 1) + CF(i - 2) + 1

com o mais um porque contamos a própria chamada representada por CF(i).

Com isso, no nosso código, podemos fazer o cálculo de ambos os valores ao mesmo tempo, pois precisamos tanto do Fibonacci quanto do número de chamadas.

Perceba que como temos apenas 39 valores diferentes, podemos inclusive pré-processar todos os casos antes de começarmos a receber as requisições ou podemos ir atendendo pela demanda, fica a seu critério. No meu código eu decidi fazer por demanda; para pré-processar todos os casos, basta acrescentar uma chamada calcula(39) na frente da leitura do input.

Last updated

Was this helpful?