MySQLストアドプロシージャで数の階乗を計算する方法
MySQLでは、ストアドプロシージャを利用することで、数値の階乗(n!)を簡単に計算できます。階乗とは、1からその数までのすべての正の整数を掛け合わせた値のことです。例えば、5の階乗は「5 × 4 × 3 × 2 × 1 = 120」となります。
以下の手順に従って、階乗を求めるストアドプロシージャを作成してみましょう。
ストアドプロシージャの作成
次のクエリを実行することで、階乗を計算するプロシージャ「fact」を作成できます。
mysql> DELIMITER //
mysql> CREATE PROCEDURE fact(IN x INT)
-> BEGIN
-> DECLARE result INT;
-> DECLARE i INT;
-> SET result = 1;
-> SET i = 1;
-> WHILE i <= x DO
-> SET result = result * i;
-> SET i = i + 1;
-> END WHILE;
-> SELECT x AS Number, result AS Factorial;
-> END//
Query OK, 0 rows affected (0.17 sec)
コードの解説
- DELIMITER //:ステートメントの区切り文字を「//」に変更し、プロシージャ内のセミコロンが誤って解釈されないようにします。
- CREATE PROCEDURE fact(IN x INT):整数型の入力パラメータ「x」を受け取るプロシージャを定義します。
- DECLARE result INT / DECLARE i INT:計算結果を格納する変数「result」と、カウンタ用の変数「i」を宣言します。
- WHILE ループ:「i」が「x」以下である間、「result」に「i」を掛け続けることで階乗を計算します。
- SELECT 文:入力した数値と計算結果を「Number」「Factorial」列として表示します。
プロシージャの呼び出し方法
作成したプロシージャは、CALL文を使い、階乗を求めたい数値を引数として渡すことで実行できます。
mysql> DELIMITER ;
mysql> CALL Fact(5);
+--------+-----------+
| Number | Factorial |
+--------+-----------+
| 5 | 120 |
+--------+-----------+
1 row in set (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
mysql> CALL Fact(6);
+--------+-----------+
| Number | Factorial |
+--------+-----------+
| 6 | 720 |
+--------+-----------+
1 row in set (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
このように、CALL Fact(5) を実行すると「120」、CALL Fact(6) を実行すると「720」が返されます。引数の値を変更するだけで、任意の数値の階乗を柔軟に取得できるのがストアドプロシージャの利点です。
-
グリッド上に単一のパスを作るためにブロックすべきセル数を求めるC++プログラム
問題の概要縦 h × 横 w のサイズを持つグリッドが与えられているとします。ロボットはセル (0, 0) の位置からスタートし、(h - 1, w - 1) の位置へ移動する必要があります。グリッドのセルには「ブロックされているセル」と「ブロックされていないセル」の2種類があり、ロボットはブロックされていないセルのみを通過できます。移動は上下左右の4方向が可能です。ロボットはあるセルから隣接するセルへ任意の方向に移動できるため、スタートからゴールまで複数の経路が存在する可能性があります。本問題では、(0, 0) から (h - 1, w - 1) までの経路を1本だけ残し、その経路に含まれな
-
Pythonで倉庫(godown)に押し込めるボックスの数を求めるプログラム
問題の概要 2つの整数配列が与えられていると仮定しましょう。一方のリストには単位幅のボックスの高さが、もう一方の配列には倉庫(godown)内の各部屋の高さが格納されています。部屋には 0〜n の番号が付いており、各部屋の高さは godown 配列の対応するインデックスに記録されています。ここで、倉庫に押し込むことのできるボックスの数を求めます。 ただし、以下のルールを守る必要があります。 ボックスを積み重ねることはできません。 ボックスの順序は自由に入れ替えられます。 ボックスは必ず左から右へ向かって挿入します。 もしボックスの高さがある部屋の高さより大きい場合、そのボックスおよびそれよ