過去問解きまくり研究所 ホーム

平成24年度 秋期 午前 問7

基礎理論

再帰に関する問題

次の関数 g(x) の定義に従って g(4) を再帰的に求めるとき,必要な加算の回数は幾らか。

〔定義〕

g(x) = if x<2 then 1
              else g(x−1) + g(x−2)
答えと解説を見る

✓ これが正解イ4

解説

足し算に落ちた呼出しだけを数えます。

数えるのは加算の回数であって、求まる値ではありません。定義を見ると、x が 2 より小さいときは 1 を返して終わりなので、そこでは足し算が起きません。x が 2 以上のときだけ、二つの呼出しの結果を足します。つまり加算の回数は、x が 2 以上で呼ばれた回数と一致します。そこで呼出しを木にして追います。g(4) は g(3) と g(2) を呼び、g(3) は g(2) と g(1) を呼び、g(2) は g(1) と g(0) を呼びます。x が 2 以上で呼ばれたのは、g(4) が一度、g(3) が一度、そして g(2) が二度です。g(2) が二度あるのは、g(4) から呼ばれるものと g(3) から呼ばれるものが別々に計算されるからで、ここが再帰の無駄にあたります。合わせて 4 回が答えになります。値のほうも出しておくと、g(0) と g(1) が 1、g(2) が 2、g(3) が 3、g(4) が 5 となり、これはフィボナッチ数列です。値と回数はどちらも小さな整数になるので、設問がどちらを聞いているかを先に確かめてください。

ほかの選択肢はなぜ違うのか

出典:平成24年度 秋期 応用情報技術者試験 午前 問7

この解説に誤りを見つけたら教えてください。直して、直した記録を残します。誤りを報告する(メールが開きます)