第6章 ユーザー定義関数 / 第3回 模擬試験

次のコードの実行結果として正しいものはどれか。 ```php function factorial($n) { if ($n <= 1) { return 1; } return $n * factorial($n - 1); } print factorial(5); ```

120 正解
20
15
5
解説
これは自分自身を呼び出す「再帰関数」による階乗の計算です。`factorial($n)`は`$n <= 1`になるまで`$n * factorial($n - 1)`を繰り返し計算します。 `factorial(5)`の呼び出しは次のように展開されます。 ``` factorial(5) = 5 * factorial(4) = 5 * 4 * factorial(3) = 5 * 4 * 3 * factorial(2) = 5 * 4 * 3 * 2 * factorial(1) = 5 * 4 * 3 * 2 * 1 = 120 ``` 例: ``` function factorial($n) { if ($n <= 1) { return 1; } return $n * factorial($n - 1); } print factorial(5); // 120 ``` 再帰関数を書く際は、必ず`$n <= 1`のような「再帰を終わらせる条件(基底ケース)」を用意しないと、無限に呼び出しが続き`Fatal error`になる点に注意してください。 (参照: 独習PHP 第4版 第6章 ユーザー定義関数 6.4.2節 再帰関数 p.290〜291)