我将通过使用带有递归查询的 SQL 存储过程找到两个整数的 gcd。但是我陷入了一个循环,我真的不知道为什么,这是我的代码:
create or alter procedure sp_gcd
@s1 int, @s2 int
as
begin
if (@s1 % @s2 = 0)
print @s2
else if (@s2 % @s1 = 0)
print @s1
else
begin
while (@s2 % @s1 != 0)
begin
declare @temp int = @s2 % @s1
exec sp_gcd @temp, @s1
end
print @s1
end
end
exec sp_gcd 15,21
这是结果:
3
3
3
3
3
3
3
3
3
...
我刚刚开始使用 SQL,所以如果有人能提供帮助,我将不胜感激,非常感谢。
答案 0 :(得分:1)
堆栈调用:
sp_gcd 15 21
sp_gcd 6 15
sp_gcd 3 6
print 3
sp_gcd 3 6
print 3
sp_gcd 3 6
print 3
发生这种情况的原因是在过程调用 sp_gcd 6 15 中的 while 循环从未达到假条件;也就是说,条件 15 % 6!=0
始终为真。