6 の階乗を再帰でクエリする方法
前の演習では、反復的 な方法で 5! を求めました。今回は 6! を 再帰的 に計算します。同じ種類のより小さな問題に分解して、階乗 n! を再帰的に定義します。次の定義を使います。
step = 0のとき0! = 1step > 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;