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

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

アルゴリズムとプログラミングアルゴリズムとプログラミング計算問題難易度:normal
次の擬似言語は再帰で配列 arr の先頭 n 要素の合計を求める手続である。arr = {7, 12, 5, 20, 6}(要素数 5、添字は 1 から)に対し sumArr(arr, 5) を実行したとき、戻り値はどれか。
○整数型: sumArr(整数型の配列: arr, 整数型: n)
  if (n が 0 と等しい)
    return 0
  endif
  return arr[n] + sumArr(arr, n - 1)
43
38
50
500
正解
50

再帰は末尾要素 arr[n] を足して n を 1 減らす操作を n=0(0 を返す)まで繰り返す。arr の全要素 7+12+5+20+6 = 50 を合算するため ウが正しい。

?選択肢ごとの解説

ア ×先頭要素 arr[1]=7 を足し忘れた 12+5+20+6=43 であり、基底を n=1 で止めて最後の 1 要素を落とした off-by-one の誤りである。
イ ×末尾要素 arr[5]=6 を含めず 7+12+5+20=44… ではなく 12+20+6=38 のように一部要素を取りこぼした集計の誤りである。
ウ ○再帰は末尾要素 arr[n] を足して n を 1 減らす操作を n=0(0 を返す)まで繰り返す。arr の全要素 7+12+5+20+6 = 50 を合算するため ウが正しい。
エ ×合計 50 の桁を取り違えて 10 倍に膨らませた 500 とした桁の誤りである。

くわしく

再帰による配列和は『末尾から 1 要素ずつ取り出して基底まで降り、帰りで合算する』構造である。基底を n=0 とするか n=1 とするかで先頭要素の扱いが変わる。

本番での押さえどころ

試験のコツ

再帰を sumArr(arr,5)=arr[5]+sumArr(arr,4)=… と展開し、基底 sumArr(arr,0)=0 まで書き切る。

覚え方

『末尾から削って 0 で止める、帰りに足す』と再帰の往復を覚える。

よくある誤り

基底を n=1 と誤り先頭要素を落とすミス、要素の取りこぼしが多い。

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

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

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

無料ではじめる →

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

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