問題の解説がわかりません😭

午前試験免除制度対応!基本情報技術者試験のeラーニング【独習ゼミ】
またたかなさん  
(No.1)
非負の整数nに対して次のとおりに定義された関数F(n),G(n)がある。F(5)の値は幾らか。

  F(n): if n≦1 then return 1 else return n×G(n-1)
  G(n): if n=0 then return 0 else return n+F(n-1)

この問題の解説をみてもあまり理解できなかったので、わかりやすく解説していただける方がいましたらよろしくお願いします。
2019.03.31 11:09
ハム次郎さん 
(No.2)
 F(n): if n≦1 then return 1 else return n×G(n-1)
これは、
if n≦1 then return 1
1:F(n)のnが1以下だったら、F(n)は1になりますよー
else return n×G(n-1)
2:1:ではない時は、n×G(n-1)を計算してくださいねー
という流れになります。

問題のF(5)だったら、n=5として上の考え方に当てはめます。
1:F(5)の5が1以下・・・ではないので×
2:1:ではない時は、5×G(5-1)を計算・・・これです

では、次。
G(n): if n=0 then return 0 else return n+F(n-1)
これも、F(n)の時と似た考え方です。
if n=0 then return 0
1:F(n)のnが0だったら、F(n)は0になりますよー
return n+F(n-1)
2:1:ではない時は、n+F(n-1)を計算してくださいねー
という流れになります。

先ほど、F(5)の時に、
2:1:ではない時は、5×G(5-1)を計算・・・これです!
という選択をしましたので、5×G(5-1) ⇒ 5×G(4)のG(4)を考えることになります。

G(4)だったら、n=4として上の考え方に当てはめます。
1:G(4)の4が0・・・ではないので×
2:1:ではない時は、4+F(4-1)を計算・・・これです!

上のF(n)とG(n)の計算を繰り返していくと、いずれn≦1、n=0というタイミングがきます。
その瞬間から値が確定していくというわけです。

計算の流れを見た方が早いかもしれないので、実際の試験でやる時の流れを書いときます。

F(5) = 5×G(5-1)

G(4) = 4+F(4-1)

F(3) = 3×G(3-1)

G(2) = 2+F(2-1)

F(1) = n≦1だから、1だ!
ということは、今の計算をさかのぼっていくと・・・
G(2) = 2+F(2-1) = 2 + 1 = 3

F(3) = 3×G(3-1) = 3 × 3 = 9

G(4) = 4+F(4-1) = 4 + 9 = 13

F(5) = 5×G(5-1) = 5 × 13 = 65⇒これが答えというわけです!
2019.03.31 12:16

返信投稿用フォーム

スパム防止のためにスレッド作成日から30日経過したスレッドへの投稿はできません。

その他のスレッド


Pagetop