�Z�p�m����(���H�w����)�E���Z�p�Ҏ����B�t�@�[�X�g�}�N���B
�r�������� �Q�O�P�U�D�S�D�P�X
��P�P
���R�� n �ɑ��āA���̂Ƃ���ċA�I�ɒ�`������ f(n) ���l����Bf(5) �̒l�͂ǂꂩ�B
�@�@f(n): if n��1 then return 1�@else return n+f(n-1)
�A�@6�@�@�C�@9�@�@�E�@15�@�@�G�@25
����
�E
���
f(n) ��
n��1�ȉ��Ȃ�1��Ԃ��B
n��1�����傫���ꍇ�́An+f(n-1)�ƂȂ�A�ċA�I�Ɋ� f(n) ���Ăяo���A���ʂ�Ԃ��B
�v�Z�ߒ��͈ȉ��̂Ƃ���ł���B
f(
5) �� 5 + f(5-1) �� 5 + f(4)
�� 5 + (4 + f(4-1)) �� 5 + (4 + f(3)) �� 9 + f(3)
�� 9 + (3 + f(3-1)) �� 9 + (3 + f(2)) ��
12 + f(2)
�� 12 + (2 + f(2-1)) �� 12 + (2 + f(1)) �� 14 + f(1)
�� 14 + 1 �� 15
copyright©2016 FastMacro all rights reserved.
今秋の基本情報技術者試験を受験するにあたって、表題の問題が全く理解できません。
回答の解説を読んでも、なぜそうなるのかがわかりません。
どなたか、解説が可能であればどうぞよろしくお願いいたします。
自然数nに対して,次のように再帰的に定義される関数f(n)を考える。f(5)の値はどれか。
f (n):if n≦1 then return 1 else return n+f(n-1)
ア 6
イ 9
ウ 15
エ 25
↓
関数f(n)の定義を言葉に置き換えると,「f(n)は,nが1以下のときは1,そうでないならn+f(n-1)となる」となります。
実際にf(5)を計算してみましょう。
f(5)=5+f(4)
次に,f(4)を計算します。
f(4)=4+f(3)
同様に,f(3),f(2),f(1)を計算します。
f(3)=3+f(2)
f(2)=2+f(1)
f(1)=1
よって,f(5)は以下のように計算できます。
f(5)=5+f(4)
=5+4+f(3)
=5+4+3+f(2)
=5+4+3+2+f(1)
=5+4+3+2+1
=15
以上より,正解は,選択肢ウです。
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
15分調べてもわからないことは
teratailで質問しよう!
ただいまの回答率
87.20%
質問をまとめることで
思考を整理して素早く解決
テンプレート機能で
簡単に質問をまとめる
質問する
関連した質問
同じタグがついた質問を見る
基本情報技術者
基本情報技術者とは、経済産業省が行う国家資格「情報処理技術者試験」の区分の一つです。試験ではプログラマーやシステムエンジニアなどIT業界で働くために必要とされる基礎知識や情報処理において論理的な考え方ができるか等が問われ、企業から高い評価を獲ることができ、IT業界の入門的な資格として人気があります。
�ߘa���N �H�� ��{���Z�p�� �ߑO ��11
��11�@�@ �ċA�I�Ȋ��@���R�� n �ɑ��āC���̂Ƃ���ċA�I�ɒ�`������ f ( n ) ���l����B f (5) �̒l�͂ǂꂩ�B
�@�@�@ f ( n )�Fif n ��1 then return 1 else return n + f ( n -1) �A�@6�@�@�@�@�@�@�@�@ �C�@9�@�@�@�@�@�@�@�@�@ �E�@15�@�@�@�@�@�@�@�@�@ �G�@25
����@�ċA�I�ɒ�`�������́A�������g���Ăяo���ċA���ł���B
�@���̊��́A f (1) �܂Ŏ������g���Ăяo���B
f (5)���T�{ f �i�S�j
�@�@�@�@���T�{�S�{ f �i�R�j
�@�@�@�@���T�{�S�{�R�{ f �i�Q�j
�@�@�@�@���T�{�S�{�R�{�Q�{ f �i�P�j
�@�@�@�@���T�{�S�{�R�{�Q�{�P
�@�@�@�@���P�T
�y����21�N�t ��08�z
[���O�̖��] [���̖�聨] [���ꗗ�\] [�����] [�L�[���[�h����] [��{���Z�p�Ҏ���TOP ]再帰的に定義される関数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!ということで正解は(ウ)ですね!
正解は(ウ)です。
よっしゃ!完璧ですな!
今回はこんな感じです。
わたし
最後まで読んでいただきありがとうございました。
これからも勉強頑張りましょうね。
私も頑張ります。