Olá, Henrique!
Parece que você já tem uma função recursiva para calcular a sequência de Fibonacci, que está correta. Entretanto, você está tentando imprimir os primeiros 100 números da sequência, o que pode causar um tempo de execução muito longo e possivelmente um estouro de pilha, devido à natureza exponencial da função recursiva.
A sequência de Fibonacci cresce rapidamente e a recursão que você está usando faz muitos cálculos repetidos. Por exemplo, para calcular fibonacci(5)
, você calcula fibonacci(4)
e fibonacci(3)
. Mas para calcular fibonacci(4)
, você calcula fibonacci(3)
e fibonacci(2)
. Observe que fibonacci(3)
é calculado duas vezes. Isso piora à medida que os números aumentam.
Uma solução para isso é usar uma técnica chamada memoização, onde você armazena os resultados de cálculos caros e os reutiliza quando necessário, em vez de recalcular. Aqui está um exemplo de como você pode fazer isso em C:
#include <stdio.h>
#include <stdlib.h>
#define MAX 100
long long memo[MAX];
long long fibonacci(int n){
if(n == 0) return 0;
if(n == 1) return 1;
// Se o valor já foi calculado, retorna ele
if(memo[n] != -1) return memo[n];
// Senão, calcula e armazena no array
memo[n] = fibonacci(n-1) + fibonacci(n-2);
return memo[n];
}
int main(){
// Inicializa o array com -1
for(int i = 0; i < MAX; i++){
memo[i] = -1;
}
// Agora a função pode ser chamada para n = 100
for(int i = 0; i < 100; i++){
printf("%lld\n", fibonacci(i));
}
}
Esta versão da função irá calcular cada valor da sequência de Fibonacci apenas uma vez e armazená-lo, tornando a função muito mais eficiente.
Espero ter ajudado e bons estudos!