「資格試験/情報処理技術者試験/高度共通午前1/過去問2013年春午前1/問2回答」の編集履歴(バックアップ)一覧に戻る

資格試験/情報処理技術者試験/高度共通午前1/過去問2013年春午前1/問2回答 - (2013/07/06 (土) 19:49:15) のソース

#include(資格試験/情報処理技術者試験/高度共通午前1/過去問2013年春午前1/問2)

* 正解 ウ

* 解説
nの階乗とは、1からnまでの数を掛け算します。
ただし、0の階乗は1とします。
例
>3の階乗
>>3 * 2 * 1 = 6
>6の階乗
>>6 * 5 * 4 * 3 * 2 * 1 = 720

まず、nから1までの掛け算をする関数と考えると、「fact(n+1)」としている選択肢イエは除外できます。
選択肢イエをn=3で実行すると、「fact(n+1)」の部分が「fact(3+1)」「fact(4+1)」とどんどん数字が増えていき、永遠に計算が終わりません。

次に、0の階乗を1とする原則から考えて、「if n = 0 then return 0」としている選択肢アイは不正解です。
また、選択肢アをn=1で実行すると「fact(1 - 1)」の結果が「return 0」で 0 になるため、以下のようにすべての計算結果が 0 になってしまい、nの階乗を求められないため、選択肢アも不正解となります。

例 選択肢ア n=3の場合
>fact(3)
>↓
>if n = 0 then return 0 else &color(red){return 3 * fact(3 - 1)} ※n=2で再起呼び出し
>↓
>if n = 0 then return 0 else &color(red){return 2 * fact(2 - 1)} ※n=1で再起呼び出し
>↓
>if n = 0 then return 0 else &color(red){return 1 * fact(1 - 1)} ※n=0で再起呼び出し
>↓
>if n = 0 then &color(red){return 0} else return 0 * fact(0 - 1) ※n=0のため、「return 0」

選択肢アでは最終的に、「3 * 2 * 1 * 0」となってしまうため、