再帰的に定義される関数f(n)を考えたくなんてないんですがやめてくれませんか
基本情報技術者 過去問2019年(令和元年) 秋期 午前 問11 を参考に考えてみます。
<問題>
自然数nに対して,次のように再帰的に定義される関数f(n)を考える。f(5)の値はどれか。
f(n):if n≦1 then return 1 else return n+f(n-1)
<選択肢>
(ア) 6
(イ) 9
(ウ) 15
(エ) 25
自然数nに対して,次のように再帰的に定義される関数f(n)を考える。f(5)の値はどれか。
ここから私の思考です↓
ちなみに青字は文章を読んだ際の私の頭の中です。
<問題>
自然数nに対して,次のように再帰的に定義される関数f(n)を考える。f(5)の値はどれか。
再帰的って言葉がまた文系の人間を不快にするワードですね。
ややこしそうな匂いがプンプンしますね。
f(n):if n≦1 then return 1 else return n+f(n-1)
でました。拒否反応。
f(n)ってのを見ただけで鳥肌が立ちますが、我慢して順番に進んでいかないといけないみたいですね。
あきらめて1つ1つ進んでいきましょうか。
まず、問題文の解読から。
f(n):if n≦1 then return 1 else return n+f(n-1)
問題文の意味に関しては、ある程度の基礎知識がないとそもそも理解不能でしょうね。
私の場合、ExcelやVBAを日頃からよく使用しているのでこの文法に関しては基礎知識としては十分ありそうです。
今回の文法としてはこれが当てはまりそうです。
if 条件 then A else B
if は もし
then は ~であれば
else は 違うのであれば
という日本語に当てはめてみたらわかりやすいでしょうね。
if 条件 then A else B を日本語の文にしてみると
もし 条件 であれば A 違うのであれば B
だいぶわかりやすくなりましたかね?
では実際の問題を日本語にしてみると、、、
(問題文の一番最初に書いているf(n)は無視してよいです。この式はf(n)という名前の式で内容が:の後に記載してあります。)
f(n):if n≦1 then return 1 else return n+f(n-1)
もし nが1以下 であれば 1を返す 違うのであれば n+f(n-1)を返す
となります。
return は返す ってことですね。まぁ1を表示、出力、、、まぁ出すってことです。
基本情報技術者の再帰の計算問題は実際に数字をあてはめて順番に進めてみましょう
問題ではf(5)のときの値を聞かれているのでnに5を当てはめて進めてみましょう。
f(5):if 5≦1 then return 1 else return 5+f(5-1)
もし 5が1以下 であれば 1を返す 違うのであれば 5 + f(5-1)
5は当然1以下ではないので、 5 + f(5-1) へ進みます。
【5 +】 ってのは覚えておきましょう。
f(5-1) というのはf(4)ということですね。
f()がまた出てきましたね。これが再帰って部分ですね。
f(4)というのはf(n) のnが4ということなので、、
f(4):if 4≦1 then return 1 else return 4+f(4-1)
もし 4が1以下 であれば 1を返す 違うのであれば 4 + f(4-1)
4は当然1以下ではないので、 4 + f(4-1) へ進みます。
【4 +】 ってのは覚えておきましょう。
f(4-1) というのはf(3)ということですね。
f(3)というのはf(n) のnが3ということなので、、
f(3):if 3≦1 then return 1 else return 3+f(3-1)
もし 3が1以下 であれば 1を返す 違うのであれば 3 + f(3-1)
3は当然1以下ではないので、 3 + f(3-1) へ進みます。
【3 +】 ってのは覚えておきましょう。
・・・
もうなんとなくわかってきた人はわかってきたかと思いますが、
おんなじことの繰り返しですね。
たぶん n が 1 になるまで繰り返すんだろうな、と感づいた人は正解です。
はしょりたいところですが、くそご丁寧に、以降も同様に1つずつ進めます。では、
f(3-1) というのはf(2)ということですね。
f(2)というのはf(n) のnが2ということなので、、
f(2):if 2≦1 then return 1 else return 2+f(2-1)
もし 2が1以下 であれば 1を返す 違うのであれば 2 + f(2-1)
2は当然1以下ではないので、 2 + f(2-1) へ進みます。
【2 +】 ってのは覚えておきましょう。
f(2-1) というのはf(1)ということですね。
f(1)というのはf(n) のnが1ということなので、、
f(1):if 1≦1 then return 1 else return 1+f(1-1)
もし 1が1以下 であれば 1を返す 違うのであれば 1 + f(1-1)
やっと流れが変わりましたね。
1は1以下なので、1を返します。
覚えておきましょうと記載していた部分ですが、
【5+】【4+】【3+】【2+】 と、返ってきた 1 をすべて足すと、、、
5+4+3+2+1 = 15
ですね。あとは、選択肢の中に15があればそれが正解です。
15がなければ、もうわかんない。この問題は 捨て です。
<選択肢>
(ア) 6
(イ) 9
(ウ) 15
(エ) 25
ほら、ありました!15!ということで正解は(ウ)ですね!
正解は(ウ)です。
よっしゃ!完璧ですな!
今回はこんな感じです。
最後まで読んでいただきありがとうございました。
これからも勉強頑張りましょうね。
私も頑張ります。
コメント