domingo, 28 de junio de 2015

Procedimiento Secuencia de Fibonacci

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

Bueno, ha sido un tiempo desde que he publicado, lo siento por eso. Hoy estaba viendo reposiciones de la serie de televisión Fringe y cuando Walter referencia a la secuencia de Fibonacci Me lado seguido con opciones de MySQL para esto. 

Ahora este post ya existía: 


Así que tomé ese puesto y se expandió en él un poco, el resultado es un procedimiento que se puede llamar y devolver el rango dentro de la secuencia de Fibonacci que usted está después. 

El procedimiento es el siguiente: 

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 ; 


Usted puede llamar a este y pase lo que sea los valores y rangos que está después. 

Así que si desea que el quinto valor (empezando desde 0) en la secuencia y el siguiente valor 

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


Así que si desea que el valor 30a (empezando desde 0) en la secuencia y el siguiente valor 

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


Así que si desea que el valor 150 (empezando desde 0) en la secuencia y el siguiente 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 | 
+--------------------------------------------+ 


Así se entiende la idea. Ahora usted también puede ampliar la gama de resultados si desea más de 2 solo cambia el segundo valor en la llamada a procedimiento. 

> 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 todos modos, espero que alguien le resulta útil y el crédito para la base de la consulta no ir al post original.