正答3
解説
正解は3です。
階乗は、0!=1、n!=n×(n-1)!と定義されます。
再帰的な定義では、再帰を止める条件(基底)と、自分自身を小さい値で呼び出す部分の両方が正しい必要があります。
【選択肢別解説】
1:× n=0のときに0を返すので、どの値も最後に0を掛けることになり、結果が常に0になります。
0!は1です。
2:× 0を返す点が誤りです。
さらにfact(n+1)を呼ぶため、nが大きくなり続けて再帰が終わりません。
3:○ n=0のとき1を返し、それ以外はn×fact(n-1)を返します。
例えばfact(3)=3×2×1×1=6となり、階乗が正しく求まります。
4:× 0のとき1を返す点は正しいです。
しかしfact(n+1)を呼ぶのでnが増え続け、n=0に到達せず再帰が終わりません。
【ポイント】
再帰関数は「終了条件で返す値」と「引数が終了条件に近づくこと」の2点を確認しましょう。