SQL 2008中的递归函数,用于计算数字的阶乘

时间:2015-09-18 12:32:44

标签: sql sql-server-2008 tsql recursion

我在接受采访时被要求创建一个函数来计算一个数字的阶乘,递归地调用它。

我尝试这样做会导致错误消息:

  

" Msg 217,Level 16,State 1,Line 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。

1 个答案:

答案 0 :(得分:4)

ALTER FUNCTION dbo.fnGetFactorial (@num int)
RETURNS INT
AS
BEGIN
    DECLARE @n  int

    IF @num <= 1 SET @n = 1
    ELSE SET @n = @num * dbo.fnGetFactorial(@num - 1)

    RETURN @n
END
GO