用一条SQL语句实现斐波那契数列

求斐波那契数列: 1,1,2,3,5,8,13,21,....
---------------------------------------

--实现方法
declare @length int
select @length=20 --数列长度

--可以直接把下面语句中的@length换成数字就只剩一条语句了 :)

;with fn as
(
select 2 as idx,cast(1 as float) as f1,cast(1 as float) as f2
union all
select idx+1 as idx,f1+f2 as f1,f1 as f2 from fn where idx<@length
)
select 1 as idx,1 as f1
union all
select idx,f1 from fn
OPTION(MAXRECURSION 0)

 

-----------------------------------------

OPTION(MAXRECURSION 0) --当指定MAXRECURSION为0时,递归层次无限制,100为系统的默认值

-----------------------------------------
公元1202年,意大利数学家斐波那契提出了一个智力题:第一个月买回一对小兔子,第二个月小兔长成大兔,第三个月生下一对小兔,小兔一个月后长成大兔,大兔每月都能生一对小兔,买兔养兔人家各月兔子的对数为
1,1,2,3,5,8,13,21,.......
谁能往下写得多,谁聪明,这个智力游戏当时十分流行,这个数列就称为斐波那契数列,后来,斐波那契给出了这个数列的递推公式:
a1=1,a2=1,a(m+2)=a(m+1)+am,(m≥1,m∈Z)
后来人们想找到数列的通项公式,但很久未成功,直到二百多年后,法国数学家比内终于得出了通项公式:
an={[(√5+1)^n]/2-[(1-√5)^n]/2]}÷√5
一个以正整数为项的数列通项竟是含无理数的复杂分式,令人称奇!
这个通项的推导很复杂,这里无法叙述.
斐波那契数列美妙无比,以它前项为分子,后项为分母的数列:
2/3,3/5,5/8.8/13,......是黄金分割数0.618的分数表示
斐波那契数列像黄金分割一样,用途十分广泛,它在科研,文学,艺术,体育,医学等许多方面都有广泛应用,千多年来,对它的研究一直热烈进行,并逐步发展.

 

posted @ 2010-06-10 17:07  Gavin Liu  阅读(872)  评论(0编辑  收藏  举报

Right people get the right information at the right time.
以技术求生存,以市场求发展;学以至用,开拓创新;达技术之颠峰,至市场之广阔!