如何递归查询 6 的阶乘
在上一道练习中,您用「迭代」方案查询了 5!。现在,您将用「递归」方式计算 6!。我们把问题分解为同类型的更小子问题,从而递归地定义阶乘 n!。可使用如下定义:
- 当
step = 0时,0! = 1 - 当
step > 0时,(n+1)! = n! * (step+1)
用这个简单定义,您可以计算任意数字的阶乘。本练习中,n! 用 factorial 表示。
您将借助递归 CTE 来应用上述定义。
本练习是课程的一部分
SQL Server 中的分层与递归查询
练习说明
- 将
factorial和step字段初始化为 1。 - 用
factorial * (step + 1)计算递归部分。 - 当当前迭代值小于目标阶乘数时,停止递归过程。
交互式实操练习
通过完成这段示例代码来试试这个练习。
WITH calculate_factorial AS (
SELECT
-- Initialize step and the factorial number
___ AS step,
___ AS factorial
UNION ALL
SELECT
step + 1,
-- Calculate the recursive part by n!*(n+1)
___ * (step + 1)
FROM calculate_factorial
-- Stop the recursion reaching the wanted factorial number
WHERE step < ___)
SELECT factorial
FROM calculate_factorial;