我在采访中被要求创建一个函数来计算一个数字的阶乘,该函数递归地调用自身。SQL 2008中的递归函数计算一个数的阶乘
我尝试这样做导致的错误消息:
“消息217,级别16,状态1,第1米的最大存储过程, 函数,触发器或视图的嵌套层数(限制32 )“。
下面是该查询:
CREATE FUNCTION fnGetFactorial (@num INT)
RETURNS INT
AS
BEGIN
DECLARE @result INT
, @n INT
WHILE (@num <> 1)
BEGIN
SELECT @n = dbo.fnGetFactorial(@num)
SELECT @result = @num * @n
SET @num = @num - 1
END
RETURN @result
END
那么,是不是可以做一个类似的方式到我上面的代码,以最少的修改?我不想使用CTE。
我不相信有最大的嵌套级别的方法。你为什么不想使用CTE? – JBond
我认为proc的逻辑是有缺陷的 - 如果你通过了,比如说4,它会做的第一件事就是递归调用它自己,传入4 ....然后func首先递归调用自己传入4 ..等等。这就是为什么你要达到嵌套级别。如果你有另一个想法的函数的逻辑,以便它递归地调用自己正确(即如果你传入4,你应该只是旨在嵌套最深4层 - 真的,3看到你不需要乘以x1),那么你可以用一个函数来计算阶乘高达32! – PulseLab
你有一个无限循环。当数字不为1时,它永远达不到'SET @num = @num - 1'。 – JodyT