SQL Server存储过程中使用递归

  在朋友的一个SQL存储过程中看到有使用递归,回首想想貌似接触数据库这么久,还从来没有哪怕一次使用过。呵呵,有点小惭愧。于是研究了一下,试着写了一段SP来实现斐波纳契数列的计算。

斐波纳契数列
  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的存储过程了,一个简单的带返回参数的过程写的是磕磕绊绊,诶,需要温故知新了。

[@more@]

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/62592/viewspace-1015609/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/62592/viewspace-1015609/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值