不知道为什么特别喜欢打图形,最近用函数递归实现了T-SQL 打印杨辉三角,贡献给大家
首先贴出以前用截取字符串的方法的实现
DECLARE @str VARCHAR(500),@temp VARCHAR(500),@space VARCHAR(10),@m INT,@n INT,@i INT,@j INT,@sum VARCHAR(500),@k INT,@st VARCHAR(500) SELECT @str=’1′,@m=1,@space=’ ‘ PRINT @str WHILE(@m<20) BEGIN SELECT @n=1,@st=” WHILE(@n<LEN(@str)-1) BEGIN SET @i=CONVERT(INT,SUBSTRING(@str,@n,10)) SET @j=CONVERT(INT,SUBSTRING(@str,@n+10,10)) SET @sum=CONVERT(VARCHAR(500),(@i+@j)) SELECT @temp=”,@k=0 WHILE(@k<10-LEN(@sum)) BEGIN SET @temp=@temp+@space SET @k=@k+1 END SET @st=@st+@sum+@temp SET @n=@n+10 END SET @m=@m+1 SET @str=’1 ‘+@st+’1’ PRINT @str END
这个我可是想了很久的,当时刚接触T-SQL,老师让我们打得,我打了一上午吧,死了一次机,啥也保存,机房带还原的。
下面贴出的是我最近无意中翻到曾经用C打的杨辉三角,是用递归实现的,没有用到数组,既然没用到数组,那么T-SQL 也一定能实现啦。
IF OBJECT_ID(‘PascalTriangle’) IS NOT NULL DROP FUNCTION PascalTriangle GO CREATE FUNCTION PascalTriangle ( @x INT, @y INT ) RETURNS INT AS BEGIN if(@y=1 OR @y=@x) return 1 return dbo.PascalTriangle(@x-1,@y-1) + dbo.PascalTriangle(@x-1,@y) END GO DECLARE @i INT, @j INT , @str VARCHAR(200) SELECT @i =1 WHILE(@i <= 10) BEGIN SELECT @j = 1, @str =” WHILE(@j<=@i) BEGIN SET @str = @str + LEFT(CONVERT(VARCHAR(200), dbo.PascalTriangle(@i,@j))+SPACE(10),7) SET @j=@j+1 END PRINT @str SET @i=@i+1 END