Repositório dos trabalhos para a matéria de estrutura de dados.
Este projeto realiza uma análise comparativa do desempenho de duas implementações para o cálculo da sequência de Fibonacci: uma abordagem recursiva e uma iterativa. A análise é feita medindo o tempo de execução de cada algoritmo para uma gama de valores de entrada n, gerando dados brutos em um arquivo .csv e, em seguida, visualizando esses dados em gráficos.
O projeto é dividido em duas partes principais: um programa em C para a lógica dos algoritmos e a medição de tempo, e um script em Python para a visualização dos dados.
O código-fonte em C é responsável por:
fibonacci_recursive: Segue a definição matemática $F(n) = F(n-1) + F(n-2)$. Como vimos em aula, esse método gera uma árvore de recursão. Logo, como, para camada chamada de $F(n)$, chamamos outras duas, esperamos $O(2^n)$.fibonacci_iterative: Utiliza um laço para calcular os valores da sequência de forma sequencial. Como o laço tem n repetições, esperamos $O(n)$.calculate_recursive_time e calculate_iterative_time usam a função clock() da biblioteca <time.h> para medir o tempo de processador gasto.RECURSIVE_REPEATS e ITERATIVE_REPEATS), e o tempo médio por execução é calculado.data_generate() itera sobre valores de n (de 0 a N_MAX), chama as funções de medição de tempo para ambas as implementações e escreve os resultados (n, tempo_recursivo, tempo_iterativo) em um arquivo chamado data.csv.O script graph.py utiliza as seguintes bibliotecas:
data.csv de forma eficiente.O script gera quatro gráficos distintos para analisar os dados
A execução do código em C gera os dados de tempo, e o script em Python produz os seguintes gráficos.



n grande
Os dados confirmam o esperado: comportamento linear para a versão iterativa e comportamento exponencial para a recursiva.