再帰関数|科目A-1(応用情報技術者) 令和7年 春期午前試験 問7

出典:令和7年春期 午前 問7 分野:アルゴリズムとプログラミング / アルゴリズム
fact(n)は,非負の整数nに対してnの階乗を返す。fact(n)の再帰的な定義はどれか。
  • ア:if n = 0 then return 0 else return n × fact(n - 1)
  • イ:if n = 0 then return 0 else return n × fact(n + 1)
  • ウ:if n = 0 then return 1 else return n × fact(n - 1)
  • エ:if n = 0 then return 1 else return n × fact(n + 1)
応用情報技術者
解説

階乗は、n! = n ×(n - 1)×(n - 2)×…×1で定義されます。また、0! = 1です。

再帰的に表す場合、n = 0のときは1を返し、nが0より大きいときはn × fact(n - 1)を返します。

例えば、fact(3)は、3 × fact(2)= 3 × 2 × fact(1)= 3 × 2 × 1 × fact(0)= 6となります。

したがって、が適切です。

❌他選択肢が誤りの理由
ア:if n = 0 then return 0 else return n × fact(n - 1)
⇒0!は0ではなく1です。停止条件で0を返すと、すべての計算結果が0になってしまいます。
イ:if n = 0 then return 0 else return n × fact(n + 1)
⇒0!を0としている点が誤りです。また、n + 1を呼び出すと値が増え続け、停止条件のn = 0に到達しません。
エ:if n = 0 then return 1 else return n × fact(n + 1)
⇒0! = 1という停止条件は正しいですが、再帰呼出しでn + 1を指定すると値が増え続けるため、通常は再帰処理が終了しません。
TSUNAGARU-ADVICE

まず押さえたいこと

階乗は、nから1までの整数を掛け合わせた値です。再帰では、nの階乗をn ×(n - 1の階乗)として表し、処理を止めるための基底条件として0の階乗を1にします。

迷ったときの判断軸

再帰関数では、呼出しのたびに終了条件へ近づく必要があります。n - 1なら0へ近づきますが、n + 1では値が増え続けて終了できません。また、0の階乗を0にすると、1以上の階乗もすべて0になってしまいます。

科目Bにつなげるために

特にプロフェッショナルデジタルスキル(システム)試験合格を目指す方は、再帰処理を確認するときに、基底条件が正しいか、引数が基底条件へ近づくか、再帰式が定義どおりかの3点を確認すると有効です。スタックや再帰アルゴリズムの問題につながります。