Como Usar a Série de Fibonacci no Python?
Um Guia Python para a Sequência de Fibonacci
A sequência de Fibonacci é uma sequência muito famosa de números inteiros. A sequência surge naturalmente em muitos problemas e possui uma definição recursiva interessante. Aprender como gerá-la é um passo essencial na jornada do programador pragmático em direção ao domínio da recursão. Neste tutorial, você aprenderá o que é a sequência de Fibonacci e como gerá-la usando Python.
Introdução à Sequência de Fibonacci
Leonardo Fibonacci foi um matemático italiano que conseguiu rapidamente produzir uma resposta para essa pergunta feita pelo Imperador Frederick II da Suábia: “Quantos pares de coelhos são obtidos em um ano, excluindo os casos de morte, supondo que cada casal dá à luz a outro casal a cada mês e que os casais mais jovens já são capazes de se reproduzir no segundo mês de vida?”
A resposta foi a sequência seguinte:
1, 1, 2, 3, 5, 8, 13, 21, …
O padrão começa após os dois primeiros números, 0 e 1, onde cada número na sequência é sempre a soma dos dois números anteriores. Matemáticos indianos já conheciam essa sequência desde o século VI, e Fibonacci aproveitou para calcular o crescimento das populações de coelhos.
Gerando a Sequência de Fibonacci Recursivamente em Python
Vamos começar gerando a sequência de Fibonacci usando um algoritmo recursivo. Um algoritmo recursivo é aquele que se chama a si mesmo para resolver um problema menor.
Nesse exemplo, a função fib
recebe um número n
e retorna o n
-ésimo número da sequência de Fibonacci. Se n
for 0 ou 1, a função retorna n
imediatamente. Caso contrário, ela chama a si mesma para obter os dois números anteriores da sequência e retorna a sua soma.
Podemos testar essa função chamando-a com diferentes valores de n
:
Otimizando o Algoritmo Recursivo para a Sequência de Fibonacci
Embora o algoritmo recursivo funcione, ele é extremamente ineficiente para valores grandes de n
. Isso ocorre porque ele recalcula os mesmos valores repetidamente. Vamos utilizar uma técnica chamada memoização para otimizar o algoritmo.
Memoizando o Algoritmo Recursivo
A memoização é uma técnica que envolve o armazenamento dos cálculos já realizados para evitar repetições desnecessárias. Podemos usar um dicionário Python para armazenar os valores já calculados.
Nesse exemplo, adicionamos um dicionário chamado cache
para armazenar os valores já calculados. Sempre que chamamos a função fib
, verificamos se o valor já está presente no cache
. Se estiver, retornamos o valor armazenado. Caso contrário, realizamos o cálculo normalmente, armazenamos o resultado no cache
e retornamos o resultado.
Podemos testar a função novamente e comparar o desempenho:
Gerando a Sequência de Fibonacci em Python
Agora que otimizamos o algoritmo recursivo, podemos explorar outras formas de gerar a sequência de Fibonacci.
Usando Recursão e uma Classe Python
Nesse exemplo, encapsulamos a lógica da sequência de Fibonacci em uma classe chamada Fibonacci
. A classe possui um dicionário cache
para armazenar os valores já calculados. A função fib
utiliza a mesma lógica de memoização que vimos anteriormente.
Podemos utilizar a classe dessa forma:
Usando Iteração e uma Função Python
Nesse exemplo, utilizamos uma abordagem iterativa para gerar a sequência de Fibonacci. Utilizamos duas variáveis, a
e b
, para armazenar os dois últimos números da sequência. A cada iteração, atualizamos essas variáveis e continuamos o loop. No final, retornamos a
, que será o n
-ésimo número da sequência.
Podemos testar essa função:
Conclusão
Neste tutorial, você aprendeu o que é a sequência de Fibonacci e explorou diferentes formas de gerá-la usando Python. Começamos com um algoritmo recursivo simples e, em seguida, otimizamos o mesmo usando memoização. Também vimos como gerar a sequência de Fibonacci utilizando uma classe e uma função iterativa. Esperamos que essas informações sejam úteis em seus estudos e projetos futuros.