Notebook 09
Série de Fibonacci, 1d array
Os dois primeiros números da sequência de Fibonacci são $x_0$ = 0 e $x_1$ =1. A partir deles os demais podem ser obtidos a partir de uma regra de recorrência:
\begin{equation} x_n = x_{n-1} + x_{n-2} \end{equation}A sequência de Fibonacci possui algumas propriedades peculiares. Considere o início da sequência:
$n$ | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | ... |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
$x_n$ | 0 | 1 | 1 | 2 | 3 | 5 | 8 | 13 | 21 | 34 | 55 | 89 | 144 | 233 | 377 | 610 | ... |
Note que $x_3$ = 2 e que o número a cada 3 posições é múltiplo de $x_3$ (ou seja, múltiplo de 2): $x_6$ = 8, $x_9$ = 24, $x_{12}$ = 144 etc..
Algo semelhante acontece para que $x_4$ = 3: o número a cada 4 posições é múltiplo de $x_4$ (ou seja, múltiplo de 3): $x_8$ = 21, $x_12$ = 144 etc.
E assim sucessivamente: $x_5$ = 5 e o número a cada 5 posições é múltiplo de $x_5$ (ou seja, múltiplo de 5): $x_10$ = 55, $x_15$ = 610 etc.
O script deste documento gera uma matriz com os 78 primeiros números da sequência de Fibonacci (paramos no 78o. porque o maior inteiro "seguro" suportado pelo objeto Number do JavaScript é 253 − 1 = 9007199254740991 e o 80o. número de Fibonacci é maior do que isso; existem maneiras de lidar com números arbitrariamente grandes em JavaScript, mas no momento vamos nos ater ao básico).
Em seguida, percorre a lista de números gerados verificando se a regra acima realmente vale para todos os números a cada tês posições ($x_3$, $x_6$, $x_9$ etc.). Note o uso de %1 para verificar se a divisão do número por 1 deixa algum resto (esta é uma das maneiras possíveis de se obter a parte fracionária de um número, com um eventual caveat). Além disso o script imprime também uma matriz com os resultados da divisão, para facilitar a confirmação.
Exercícios
Nessa equação, $\varphi$ é conhecida como a razão dourada (você não vai se arrepender se estudar um pouco mais sobre esse número!), que é dada por:
\begin{equation} \varphi = \frac{1+\sqrt{5}}{2} = 1,6180339887498945... \end{equation}Implemente o cálculo da série de Fibonacci utilizando a expressão acima. Note que devido a erros de representação numérica (a raiz quadrada de 5 é um número irracional, com infinitas casas decimais, não representáveis no objeto Number do JavaScript básico), os resultados da série que utiliza a razão dourada não são inteiros (mas quase). Se aplicamos o critério usual de arredondamento para produzir um número inteiro com a série da razão dourada, vemos que os números realmente começam a divergir a partir do 71o., já muito perto do limite da capacidade tradicional de grandes números no JavaScript básico.