domingo, 28 de junho de 2015

Seqüência de Fibonacci Procedimento

Original post: http://anothermysqldba.blogspot.com/2015/06/fibonacci-sequence-procedure.html

 Bem, tem sido um tempo desde que eu postei, desculpe por isso. Hoje eu estava assistindo a reprises do programa de TV Fringe e quando Walter referenciado a seqüência de Fibonacci eu tenho lado seguido com opções do MySQL para isso. 

Agora este post já existia: 

Então eu peguei esse post e ampliou um pouco, o resultado é um procedimento que você pode ligar e voltar a gama dentro da sequência de Fibonacci que você está depois. 

O procedimento é abaixo: 

delimiter // 
CREATE PROCEDURE `Fibonacci`(IN POS INT, IN RANG INT, IN LIMTED INT) 
BEGIN 
select FORMAT(Fibonacci,0) AS Fibonacci from ( 
select @f0 Fibonacci, @fn:=@f1+@f0, @f0:=@f1, @f1:=@fn 
from (select @f0:=0, @f1:=1, @fn:=1) x, 
information_schema.STATISTICS p limit LIMTED) y LIMIT POS, RANG; 
END// 
delimiter ; 


Você pode chamar isso e passar quaisquer valores e varia você está depois. 

Então, se você quiser que o valor 5 (a partir de 0) na seqüência eo próximo valor 

> CALL Fibonacci(5,2,100); 
+-----------+ 
| Fibonacci | 
+-----------+ 
| 5 | 
| 8 | 
+-----------+ 


Então, se você quiser que o valor 30 (a partir de 0) na seqüência eo próximo valor 

> CALL Fibonacci(30,2,100); 
+-----------+ 
| Fibonacci | 
+-----------+ 
| 832,040 | 
| 1,346,269 | 
+-----------+ 


Então, se você quiser que o valor 150 (a partir de 0) na seqüência eo próximo valor 

> CALL Fibonacci(150,2,1000); 
+--------------------------------------------+ 
| Fibonacci | 
+--------------------------------------------+ 
| 9,969,216,677,189,305,000,000,000,000,000 | 
| 16,130,531,424,904,583,000,000,000,000,000 | 
+--------------------------------------------+ 


Então você começa a idéia. Agora você também pode expandir a gama de resultados se você quer mais do que apenas 2 mudar o segundo valor na chamada de procedimento. 

> CALL Fibonacci(0,10,100); 
+-----------+ 
| Fibonacci | 
+-----------+ 
| 0 | 
| 1 | 
| 1 | 
| 2 | 
| 3 | 
| 5 | 
| 8 | 
| 13 | 
| 21 | 
| 34 | 
+-----------+ 

> CALL Fibonacci(30,5,100); 
+-----------+ 
| Fibonacci | 
+-----------+ 
| 832,040 | 
| 1,346,269 | 
| 2,178,309 | 
| 3,524,578 | 
| 5,702,887 | 
+-----------+ 


De qualquer forma, espero que alguém acha útil e de crédito para a base de consulta não ir para o post original.