斐波纳契数列
800年前,意大利的数学家斐波纳契出版了惊世之作《算盘书》。在《算盘书》里,他提出了著名的“兔子问题”:假定一对兔子每个月可以生一对兔子,而这对新兔子在出生
后第二个月就开始生另外一对兔子,这些兔子不会死去,那么一对兔子一年内能繁殖多少对兔子?
答案是一组非常特殊的数字:1,1,2,3,5,8,13,21,34,55,89……不难发现,从第三个数起,每个数都是前两数之和,这个数列则称为“斐波纳契数列”,其中每个数字都是“斐波纳契数”。
存储过程如下:
Create Procedure sp_Fibonacci @Num Int, @Out Int Output As Begin Declare @A Int,@B Int,@OutA Int,@OutB Int Select @A = @Num - 1,@B = @Num - 2 If @Num <= 0 Begin Select @Out = NULL End Else Begin If @Num <= 2 Begin Select @Out = 1 End Else Begin Exec sp_Fibonacci @A,@OutA Output Exec sp_Fibonacci @B,@OutB Output Select @Out = @OutA + @OutB End End Return End
?调用存储过程
Declare @A Int
Exec sp_Fibonacci 9,@A OutPut
Print @A
得到结果是:34
在@Num比较大的时候,会报错如下:
服务器: 消息 217,级别 16,状态 1,过程 sp_Fibonacci,行 21
超出了存储过程、函数、触发器或视图的最大嵌套层数(最大层数为 32)。
可见受到了嵌套层次的限制,而且在@Num比较大的时候执行效率也不怎么样,挺慢的。太久没有写SQL Server的存储过程了,一个简单的带返回参数的过程写的是磕磕绊绊,诶,需要温故知新了。
?
?
?