如何用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
关键修改说明
- 移除多余的内层循环和变量,直接用外层循环变量控制当前层数
- 左侧空格数计算为
@max - @start,确保每层内容相对于最大层数居中 - 通过
REPLICATE(数字 + ' ', 层数)生成带空格的重复内容,再用REPLACE消除末尾多余空格
内容的提问来源于stack exchange,提问作者Cepp0
相关产品推荐
相关产品推荐

