メインコンテンツへ
アルゴリズムとプログラミング再帰関数のトレース

次の再帰関数 f(n) を f(4) として呼び出したとき、返り値はどれか。 ``` function f(n): if n <= 1: return 1 return n * f(n - 1) ```

ア.4
イ.10
ウ.16
エ.24正解

解説

この関数は「ロシアの入れ子人形(マトリョーシカ)」。f(4) を開けると f(3) が入っており、f(3) を開けると f(2)、f(2) には f(1)=1 が入っている。最終的に全部掛け合わせると 4×3×2×1=24 になる。

なぜ エ が正解か

f(4) = 4 × f(3) = 4 × 3 × f(2) = 4 × 3 × 2 × f(1) = 4 × 3 × 2 × 1 = 24。これは 4!(4の階乗)であり、再帰呼び出しが n=1 のベースケースに達するまで展開されて乗算が行われる。

なぜ ア は間違いか

n=4 を返り値とする誤り。再帰呼び出しを無視して引数をそのまま答えてしまっている。再帰展開の追跡をしていない誤り。

なぜ イ は間違いか

4+3+2+1=10 という加算の結果。関数は乗算(*)を行っているのに加算と混同した典型的な誤り。

なぜ ウ は間違いか

4²=16 という べき乗の結果。再帰を「n を n 回掛ける」と誤解した誤り。実際は n*(n-1)*(n-2)*…*1 の階乗計算である。

出典: AI生成問題(学習用)