アルゴリズムとプログラミング

基本情報技術者試験再帰」の問題

アルゴリズムとプログラミングアルゴリズムとプログラミング計算問題難易度:normal
次の再帰手続 sumAcc は、引数 acc に途中結果を蓄積しながら 1 から n までの総和を求める末尾再帰である。sumAcc(4, 0) を呼び出したとき、戻り値はどれか。
○整数型: sumAcc(整数型: n, 整数型: acc)
  if (n が 0 と等しい)
    return acc
  endif
  return sumAcc(n - 1, acc + n)
10
24
14
15
正解
10

末尾再帰では呼び出し時に acc へ n を加算する。acc は 0→4→7→9→10 と更新され、n=0 で acc=10 を返すため アが正しい。

?選択肢ごとの解説

ア ○末尾再帰では呼び出し時に acc へ n を加算する。acc は 0→4→7→9→10 と更新され、n=0 で acc=10 を返すため アが正しい。
イ ×和ではなく積 4×3×2×1=24(階乗)を求めた、加算を乗算と取り違えた誤りである。
ウ ×最後の n=1 の加算を落とし 0+4+3+2 などの途中値に余りを足した 14 とする加算漏れの誤りである。
エ ×1 から 5 までの和 15 と取り違えた、n の上限を 1 つ多く数えた off-by-one の誤りである。

くわしく

末尾再帰は再帰呼び出しが手続の最後の処理であり、途中結果を acc に持ち越す。帰り道で計算を足す通常の再帰と異なり、行きがけに値が確定していく点が核心である。

本番での押さえどころ

試験のコツ

(n, acc) の組を 1 段ずつ書き、n=0 になった行の acc を読む。

覚え方

『行きがけに足し込み、基底で acc をそのまま返す』と覚える。

よくある誤り

acc の初期値や最後の加算を取り違える、和と積を混同するミスが多い。

アルゴリズムとプログラミングの他の問題

この問題を、AIの8-ways解説つきで。

基本情報技術者試験の演習を、一問ごとに「なぜ」まで。まずは無料で。

無料ではじめる →

ukamiru 過去問 · 基本情報技術者試験 · fe-b-algo-0081

【基本情報技術者試験】再帰の問題 — 解答・解説|ukamiru 過去問