【问题标题】:While loop SQL ServerWhile 循环 SQL Server
【发布时间】:2020-03-01 08:34:26
【问题描述】:

请帮帮我。我需要编写两个函数,一个计算阶乘,另一个计算欧拉之和。

要进行欧拉和,我需要使用计算工厂的函数。 我已经有了阶乘的功能,但是在求和时我得到“NULL”

注意:需要用“while”循环来完成

e = 1 + (1/1!) + (1/2!) + (1/3!) + (1/n!)

我的代码:

CREATE FUNCTION Factorial (@a INT)
RETURNS INT 
AS
BEGIN
    DECLARE @i INT

    IF @a <= 1
        SET @i =1 
    ELSE
        SET @i = @a * dbo.Factorial(@a-1)

    RETURN @i
END

SELECT dbo.Factorial(11) 'factorial'

CREATE FUNCTION Sum_Euler(@a FLOAT)
RETURNS FLOAT
BEGIN 
    DECLARE @b FLOAT, 
            @c FLOAT;

    SET @c = (SELECT dbo.Factorial(@a))

    WHILE(@b <= @c)
    BEGIN
        SET @b = 1 / @a * @c
    END 

    SET @b = @b + 1

    RETURN @b
END
GO

SELECT dbo.Sum_Euler(10)

【问题讨论】:

  • dbo.Factorial1 表中有什么内容,或者您​​打算输入dbo.Factorial
  • dbo.Factorial 抱歉
  • 您在设置初始值之前在WHILE(@b &lt;= @c) 语句中使用了@b
  • 如何设置初始值?
  • DECLARE @b float = 0

标签: sql sql-server loops while-loop sql-server-2014


【解决方案1】:

我将对您的第二个功能进行以下更改

create FUNCTION dbo.Sum_Euler(@a int)
RETURNS float 
BEGIN 
    DECLARE @b float;
    if @a<=1
        set @b =1.0+1.0;
    else
    begin
      set @b = dbo.Sum_Euler(@a-1) + 1.0/dbo.Factorial(@a);
    end
        RETURN @b;

END
GO

select dbo.Sum_Euler(10) 将返回 2.718281801142

【讨论】:

  • @ArturoOrtizVázquez,非常欢迎您,并很高兴为您提供帮助。在应对技术挑战时,SO 是一家人。