You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用T-SQL实现金字塔对齐?含斐波那契存储过程需求

需求1:编写斐波那契数列存储过程

以下是实现需求的T-SQL存储过程,输入整数n后在消息窗口打印斐波那契数列前n项:

CREATE PROCEDURE dbo.PrintFibonacci
    @n INT
AS
BEGIN
    SET NOCOUNT ON;

    -- 校验输入合法性
    IF @n <= 0
    BEGIN
        PRINT '请输入大于0的整数';
        RETURN;
    END

    DECLARE @f0 INT = 0, @f1 INT = 1, @current INT, @count INT = 2;

    -- 打印第一项
    PRINT CAST(@f0 AS VARCHAR(10));

    -- 若n>1,打印第二项
    IF @n > 1
    BEGIN
        PRINT CAST(@f1 AS VARCHAR(10));
    END

    -- 循环计算并打印后续项
    WHILE @count < @n
    BEGIN
        SET @current = @f0 + @f1;
        PRINT CAST(@current AS VARCHAR(10));
        SET @f0 = @f1;
        SET @f1 = @current;
        SET @count += 1;
    END
END

使用示例

执行EXEC dbo.PrintFibonacci 10,消息窗口会输出:

0
1
1
2
3
5
8
13
21
34

需求2:T-SQL金字塔对齐问题

现有代码存在变量重置错误、空格计算逻辑偏差、数字无分隔符三个问题,以下是修复后的存储过程:

ALTER PROCEDURE dbo.pyramid(@start int)
AS
BEGIN
    SET NOCOUNT ON;

    DECLARE @max INT = 4;

    -- 外层循环控制层数,从输入的起始值到最大层数
    WHILE @start <= @max
    BEGIN
        -- 计算左侧空格,实现居中对齐
        DECLARE @leftSpace INT = @max - @start;
        -- 生成带空格分隔的数字串,并用REPLACE去除末尾多余空格
        PRINT SPACE(@leftSpace) + REPLACE(REPLICATE(CAST(@start AS VARCHAR(1)) + ' ', @start), '  ', ' ');
        
        SET @start += 1;
    END
END

EXEC dbo.pyramid 1

执行结果

1
          2 2
         3 3 3
        4 4 4 4

关键修改说明

  1. 移除多余的内层循环和变量,直接用外层循环变量控制当前层数
  2. 左侧空格数计算为@max - @start,确保每层内容相对于最大层数居中
  3. 通过REPLICATE(数字 + ' ', 层数)生成带空格的重复内容,再用REPLACE消除末尾多余空格

内容的提问来源于stack exchange,提问作者Cepp0

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 21:05:14