正答3
解説
正解は3です。
再帰的な定義には、再帰を止める基底部と、自分自身をより小さい問題で呼び出す再帰部が必要です。
階乗は0!=1、n!=n×(n−1)!で定義されます。
【選択肢別解説】
1:× 再帰の向きは正しいものの、n=0のときに0を返しています。
最後に0が掛けられるため、どのnでも結果が0になってしまいます。
正しくは0!=1なので1を返します。
2:× n=0で0を返す誤りに加えて、fact(n+1)を呼んでいます。
nが増え続けて基底部のn=0に到達しないため、再帰が終わりません。
3:○ n=0で1を返し、それ以外はn×fact(n−1)を返します。
例えばfact(3)は3×2×1×1=6となり、階乗の定義と一致します。
4:× 基底部は正しいものの、fact(n+1)を呼んでいます。
nが1以上のとき引数が増え続け、n=0に到達しないので再帰が終わりません。
【ポイント】
再帰的定義では、基底部の値と、引数が基底部に向かって小さくなることの2点を確認します。
基底部が正しくても引数が基底部から遠ざかると、無限に再帰呼出しが続きます。