我在採訪中被要求創建一個函數來計算一個數字的階乘,該函數遞歸地調用自身。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