PHPの再帰関数でフィボナッチ数列を計算しよう!初心者向けにやさしく解説
生徒
「先生、PHPでフィボナッチ数列を計算するにはどうしたらいいですか?」
先生
「PHPでは、再帰関数という仕組みを使って、フィボナッチ数列を計算できますよ。」
生徒
「再帰関数ってなんですか?難しそう…」
先生
「大丈夫です!図や例えを使ってわかりやすく説明しますね。では、PHPでの再帰関数とフィボナッチ数列の関係から見ていきましょう。」
1. フィボナッチ数列とは?まずは基本を確認
フィボナッチ数列(すうれつ)とは、「前の2つの数を足して次の数を作る」規則でできた数の列です。
たとえば、次のように続きます:
0、1、1、2、3、5、8、13、21、34...
つまり、3番目の数は「1+0=1」、4番目は「1+1=2」、5番目は「2+1=3」というふうに計算されます。
2. PHPでフィボナッチ数列を計算するには?
このフィボナッチ数列をPHPで計算するには、「関数」を使います。
さらに、同じ関数の中で自分自身を呼び出す「再帰関数(さいきかんすう)」という方法が便利です。
再帰関数とは、自分自身の中でまた同じ関数を使う仕組みです。ちょっと不思議に聞こえるかもしれませんが、処理を繰り返すのにとても便利な書き方です。
3. PHPの再帰関数でフィボナッチ数列を作る
では、PHPで再帰関数を使ってフィボナッチ数列を計算するプログラムを見てみましょう。
function fibonacci($n) {
if ($n === 0) {
return 0;
} elseif ($n === 1) {
return 1;
} else {
return fibonacci($n - 1) + fibonacci($n - 2);
}
}
echo fibonacci(6);
このプログラムでは、fibonacciという関数が使われています。$nという数字を受け取って、
その位置のフィボナッチ数を返してくれます。
例としてfibonacci(6)を呼び出すと、6番目の値「8」が表示されます。
4. プログラムのしくみをやさしく解説
このプログラムの中で行われていることを、順番に見てみましょう。
- $nが0の場合は0を返す
- $nが1の場合は1を返す
- それ以外のときは「
fibonacci($n - 1)+fibonacci($n - 2)」を返す
つまり、fibonacci(6)は
fibonacci(5) + fibonacci(4)を計算し、さらにその中でも再び関数が呼ばれるというように、どんどん分解していくのです。
5. 実行結果を確認しよう
上のPHPコードを実行すると、次のような結果が表示されます。
8
これは、フィボナッチ数列の6番目の数が「8」であることを示しています。
PHPでの再帰関数の動きを実際に見てみると、より理解が深まります。
6. 再帰関数はなぜ便利なの?
再帰関数の大きな特徴は、同じパターンの繰り返し処理をシンプルに書けることです。
たとえば、階段を登るときに「1段ずつ登る方法」と「2段飛ばして登る方法」があるとすると、「それぞれの方法の組み合わせ」を調べるのにも再帰関数が使えます。
こうした「分割して考える」問題には、とても相性が良いのです。
7. プログラミング初心者がつまずくポイントと対策
PHPの再帰関数を初めて学ぶときに、よくあるつまずきポイントは以下のようなものです。
- 関数の中で同じ関数を呼び出す仕組みがイメージしにくい
- 何回も関数が呼ばれるので、頭が混乱する
- 結果がなぜそうなるのかが見えづらい
対策としては、「紙に書いて流れを図にする」ことをおすすめします。
たとえばfibonacci(4)の流れを図にするとこうなります:
- fibonacci(4)
- fibonacci(3) + fibonacci(2)
- fibonacci(2) + fibonacci(1) + fibonacci(1) + fibonacci(0)
このように、「どの数字を使って計算されているか」を丁寧に追いかけていくと、理解がぐっと深まります。
8. 再帰関数とフィボナッチ数列の組み合わせを活かす練習
最後に、再帰関数を使ったフィボナッチ数列の応用例として「1〜10番目までの値をすべて表示する」プログラムを紹介します。
for ($i = 0; $i <= 10; $i++) {
echo fibonacci($i) . ", ";
}
このように、for文(ループ)と組み合わせることで、複数のフィボナッチ数を一気に表示できます。