Факториал в SQL
Пример для версий
Microsoft SQL Server 2005,
Microsoft SQL Server 2008 R2,
Microsoft SQL Server 2012
Используется рекурсивное определение факториала, реализованное через рекурсивный запрос. Каждая строка запроса содержит два числовых поля — n и n!, и каждая следующая строка вычисляется с использованием данных из предыдущей.
Можно вычислить целочисленные факториалы только до 20!. При попытке вычислить 21! возникает ошибка “Arithmetic overflow error”, т.е. происходит переполнение разрядной сетки.
Для вещественных чисел вычисляется факториал 100! (Для этого в примере необходимо заменить bigint на float в 3-ей строке)
with factorial(n, f) as
(
select 0, convert(bigint,1)
union all
select n+1, f*(n+1) from factorial where n<20
)
select cast(n as varchar)+'! = '+cast(f as varchar)
from factorial
Комментарии
]]>blog comments powered by Disqus
]]>