新年度サンプル問題  [科目B]問7 について

午前試験免除制度対応!基本情報技術者試験のeラーニング【独習ゼミ】
みずあさん  
(No.1)
新年度サンプル問題 [科目B]問7 について質問です。

問題を解いていくと、最終的なnの値は0になると思うのですが、
if (n = 0) 
 return 1
という条件があるため、答えの カ だと nにどのような値をいれても 戻り値は 1  となってしまうと思うのですが・・・  どこか理解が違っていますか?
2023.05.13 20:34
まーぼさん 
FE ブロンズマイスター
(No.2)
お答えします。

if (n = 0){

return 1;

}

とは、「nが0のときには、1を返す」という意味です。そのため、すべての数字で1を返す訳ではないというのは分かりますかね?

n = 2のときを例にして考えます。

n = 2なので、if文の条件式に合わず実行されません。
次に、return n×factorial(n-1)が実行されます。
n =2なので、2×factorial(1)を計算しなければならず、factorial(1)が実行されます。
factorial(1)を考えるとき、引数が0かどうかを考えないといけませんね。
factorialの引数は0でないので、if 文は実行されず、return n×factorial(n-1)が実行され、n=1なので、1×factorial(0)を求めます。
factorialの引数が0なので、ここで初めてif文が実行され、1が返されます。

factorial(2)は、2×factorial(1)
factorial (1)は、1×factorial(0)
factorial (0)は、1

ということが分かったので、
factorial (1) = 1×factorial(0)に、factorial(0) = 1を代入し、factorial(1) = 1
factorial (2) = 2×factorial(1)に、factorial(1) = 1を代入し、factorial(2) = 2

となり、factorial(2) = 2で、2が返されます。
2023.05.13 21:08
みずあさん  
(No.3)
ご回答ありがとうございます。理解できました。
factorial(0) の際の戻り値が 1 という事であって、factorial関数全体の戻り値が 1  というわけではないんですね。
2023.05.13 21:16
まーぼさん 
FE ブロンズマイスター
(No.4)
その通りです。
再帰関数を用いる例として有名なものに、階乗計算、最大公約数の計算(ユークリッドの互除法)、フィボナッチ数の計算、クイックソートなどがあります。
どれも科目Bに出る可能性があるので、再帰関数に不安がある場合はこれらも復習しておくことをおすすめします。
2023.05.13 21:26

返信投稿用フォーム

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

その他のスレッド


Pagetop