Fibonacci em SQL

Como prometi que minha próxima postagem seria sobre SQL, resolvi fazer a sequência de Fibonacci no SQL Server.

O SQL Server e o Transact SQL permitem a criação de funcions, procedures ou mesmo queries com o uso de várias construções comuns em linguagens de programação, como while, if etc.

A sequência de Fibonacci é um exercício muito comum de ser feito em cursos técnicos ou faculdades de áreas relacionadas à informática, e é um exercício clássico de programação.
Para quem não sabe, a Sequência de Fibonacci é uma sequência onde o próximo número sempre é a soma dos dois anteriores, partindo do 1, por exemplo:
1,1,2,3,5,8,13,21

O número de ouro, ou razão áurea, se dá pela divisão de dois termos vizinhos da sequência de Fibonacci, como por exemplo 13/5. Esse número, representado pela letra grega Φ (phi) é de grande importância na matemática e na biologia, já que indica a proporção em que se dá o crescimento biológico. Várias partes de nosso corpo (e de outras espécies) seguem essa proporção áurea.

O número de ouro é um número irracional, porém quanto mais longe (maiores os termos) você chegar na sequência de Fibonacci mais preciso será o seu número de ouro.

Esse é um exercício bastante praticado por quem está começando em uma linguagem, é um clássico, por isso resolvi fazer esse post com a série de Fibonacci em SQL.


declare @anterior double precision  = 1
declare @proximo double precision  = 1
declare @temp double precision  = 0
declare @termo int = 1
declare @numerodourado double precision = 0

create table #fib
(
anterior double precision ,
proximo double precision , 
numeroouro double precision
)

WHILE    (@termo <= 100 )
begin

 set @temp = @anterior + @proximo
 set @anterior = @proximo
 set @proximo = @temp
 set @numerodourado = @proximo/@anterior
 
 insert into #fib values (@anterior, @proximo, @numerodourado)
 
 set @termo = @termo+1
 
end 

select * from #fib

drop table #fib

Esse código chega até o termo de número 100 na sequência. Você pode incrementar mostrando mais termos, porém, como usamos aqui uma tabela temporária, você deve levar em conta o crescimento dessa tabela (e do TempDB). Você pode fazer a sequência em uma tabela fixa e deixar pré-calculado, para consultar quando precisar, ou selecionar os dois últimos termos para continuar de onde parou. Tente fazer esses exercícios.
Have Fun ;)

Comentários

Postagens mais visitadas deste blog

Detectar o encoding de um arquivo para não corromper ao transformá-lo

erro "ora-12154: tns: não foi possível resolver o identificador de conexão especificado"

Quebras de linha no Delphi 2010