カテゴリ: PHP 更新日: 2026/09/18

PHPの再帰関数でフィボナッチ数列を計算しよう!初心者向けにやさしく解説

PHP の再帰関数を使った計算(フィボナッチ数列)
PHP の再帰関数を使った計算(フィボナッチ数列)

先生と生徒の会話形式で理解しよう

生徒

「先生、PHPでフィボナッチ数列を計算するにはどうしたらいいですか?」

先生

「PHPでは、再帰関数という仕組みを使って、フィボナッチ数列を計算できますよ。」

生徒

「再帰関数ってなんですか?難しそう…」

先生

「大丈夫です!図や例えを使ってわかりやすく説明しますね。では、PHPでの再帰関数とフィボナッチ数列の関係から見ていきましょう。」

1. フィボナッチ数列とは?まずは基本を確認

1. フィボナッチ数列とは?まずは基本を確認
1. フィボナッチ数列とは?まずは基本を確認

フィボナッチ数列(すうれつ)とは、「前の2つの数字を合計して、次の数字を作る」というシンプルなルールで並んだ数字の列のことです。イタリアの数学者レオナルド・フィボナッチにちなんで名付けられました。

具体的にどのような数字が並ぶのか、まずは最初の数個を見てみましょう。

0、1、1、2、3、5、8、13、21、34...

一見するとただの数字の羅列に見えますが、実は計算のルールはとても簡単です。プログラミング未経験の方でも、以下の図解を見ればすぐに理解できますよ。

  • 3番目の数:1番目の「0」+ 2番目の「1」= 1
  • 4番目の数:2番目の「1」+ 3番目の「1」= 2
  • 5番目の数:3番目の「1」+ 4番目の「2」= 3
  • 6番目の数:4番目の「2」+ 5番目の「3」= 5

このように、「直前の2つを足すと次の答えになる」という連鎖がどこまでも続いていくのが特徴です。この仕組みは、自然界のひまわりの種の並び方や、貝殻の渦巻きなどにも現れる不思議な法則として知られています。

プログラミングの世界では、この「自分より前のデータを使って計算する」という構造が、アルゴリズム(計算の手順)を学ぶための絶好の題材としてよく使われます。

2. PHPでフィボナッチ数列を計算するには?

2. PHPでフィボナッチ数列を計算するには?
2. PHPでフィボナッチ数列を計算するには?

数学的な法則であるフィボナッチ数列をPHPプログラムで再現するには、「関数(かんすう)」という仕組みを利用します。関数とは、特定の処理をひとまとめにして、いつでも呼び出せるようにした「命令のセット」のようなものです。

さらに、今回の最大のポイントは、同じ関数の中で自分自身を呼び出す「再帰関数(さいきかんすう)」という高度なテクニックを使う点にあります。

「自分の中で自分を呼び出す」と聞くと、無限ループになってしまいそうで少し怖く感じるかもしれません。しかし、プログラミング初心者の方でも理解しやすいように、まずは簡単な「カウントダウン」を例に、再帰のイメージを掴んでみましょう。


function countDown($num) {
    // 終わりを決める(ベースケース)
    if ($num <= 0) {
        echo "スタート!";
        return;
    }

    echo $num . "... ";
    
    // 自分自身をもう一度呼び出す(再帰呼び出し)
    countDown($num - 1);
}

countDown(3);

このサンプルでは、countDown(3)を呼ぶと、その中でcountDown(2)、さらにその中でcountDown(1)…というように、マトリョーシカ人形のように処理が重なっていきます。

再帰関数は、今回のような「前の数字を足し続ける」という繰り返しのルールを持つフィボナッチ数列の計算と非常に相性が良く、コードを驚くほどスッキリと短く書くことができる便利な書き方なのです。

3. PHPの再帰関数でフィボナッチ数列を作る

3. PHPの再帰関数でフィボナッチ数列を作る
3. PHPの再帰関数でフィボナッチ数列を作る

それでは、実際にPHPを使ってフィボナッチ数列を計算するプログラムを書いてみましょう。今回は「自分自身を呼び出す」という再帰関数のルールに則って、非常にシンプルなコードで作成します。

プログラミングが初めての方でも安心してください。以下のコードは、「前の2つの数字を足す」という数学のルールをそのままPHPの言葉に翻訳しただけのものです。


<?php
// フィボナッチ数列のn番目の数字を求める関数
function fibonacci($n) {
    // 最初の数(0番目と1番目)は計算不要なので、そのまま数字を返す
    if ($n === 0) {
        return 0;
    } 
    if ($n === 1) {
        return 1;
    }

    // それ以外(2番目以降)は、「1つ前」と「2つ前」を足し合わせる(再帰呼び出し)
    return fibonacci($n - 1) + fibonacci($n - 2);
}

// 例として、6番目の数字を表示してみる
echo fibonacci(6);
?>

このプログラムでは、fibonacciという名前の関数を定義しています。この関数は、知りたい順番($n)を教えてあげると、その位置にあるフィボナッチ数を計算して手渡してくれる(返す)役割を持っています。

例えば、fibonacci(6)と命令を出すと、関数の中で「5番目の数字」と「4番目の数字」をさらに計算しに行き、最終的な答えである「8」を導き出します。このように、複雑な計算を「小さな計算の積み重ね」に分解して記述できるのが、PHPにおける再帰関数の大きなメリットです。

一見すると難しそうですが、コードの行数が驚くほど短くまとまっている点に注目してください。これが、アルゴリズムをスマートに記述するためのプロのテクニックなのです。

4. プログラムのしくみをやさしく解説

4. プログラムのしくみをやさしく解説
4. プログラムのしくみをやさしく解説

先ほどのソースコードで、なぜフィボナッチ数列が計算できるのか、その内部的な「動きのルール」を紐解いてみましょう。このプログラムは、大きく分けて2つのフェーズ(段階)で動いています。

① 計算の「終わり」を決める(ベースケース)

再帰関数で最も重要なのが、「いつ計算を止めるか」というルールです。これを決めないと、プログラムは無限に自分を呼び出し続けて止まらなくなってしまいます。

  • $n が 0 のとき: 「0」を返して終了
  • $n が 1 のとき: 「1」を返して終了

この2つは、フィボナッチ数列のスタート地点(0, 1...)そのものです。ここまで辿り着くと、ようやく具体的な「数字」が確定します。

② 「前の2つ」に分解して頼る(再帰ステップ)

0と1以外の数字(たとえば6番目など)が指定された場合、プログラムは次のように自分自身へ仕事をパスします。

「$n番目」の答え = 「$n - 1番目」 + 「$n - 2番目」

つまり、fibonacci(6)を実行すると、内部ではまずfibonacci(5) + fibonacci(4)という式が作られます。しかし、まだ5番目と4番目の正体がわからないので、さらにその中で「4番目+3番目…」というように、マトリョーシカの殻を剥いていくように、計算をどんどん小さな単位へ分解していくのです。

最終的にすべての枝分かれが「0」か「1」にまで辿り着いたとき、それらの数字が逆流するように足し合わされ、最終的な「8」という答えが導き出されます。このように、複雑な問題を「自分と同じ構造の小さな問題」に置き換えて解くのが、再帰関数の魔法のような仕組みなのです。

5. 実行結果を確認しよう

5. 実行結果を確認しよう
5. 実行結果を確認しよう

先ほど紹介したPHPのプログラムを実際にサーバーやローカル環境で実行すると、画面には次のような数字が表示されます。


8

この「8」という数字は、フィボナッチ数列の6番目(0から数え始めて 0, 1, 1, 2, 3, 5, 8)の結果が正しく計算されたことを示しています。

プログラミング未経験の方は、「なぜ、たった数行のコードでこんな計算ができるの?」と不思議に思うかもしれません。そこで、コンピューターが内部でどのように動いているのか、さらに具体的なイメージで確認してみましょう。

コンピューターの中の動き(イメージ)
  1. fibonacci(6)が呼ばれる
  2. 「5番目と4番目を足して!」と自分自身(再帰)に命令を出す
  3. さらにその先で「4番目と3番目を足して!」と枝分かれしていく
  4. 最終的に「0」と「1」にたどり着くまで計算が繰り返される
  5. すべての数字が合流して、最後に「8」という答えが返ってくる

PHPでの再帰関数の動きを実際に目で追ってみると、数学のパズルが解けていくような感覚で、アルゴリズムの面白さをより深く理解できるようになります。この「自動的に計算が連鎖していく仕組み」こそが、プログラミングの大きな武器なのです。

6. 再帰関数はなぜ便利なの?

6. 再帰関数はなぜ便利なの?
6. 再帰関数はなぜ便利なの?

再帰関数の大きな特徴は、同じパターンの繰り返し処理をシンプルに書けることです。

たとえば、階段を登るときに「1段ずつ登る方法」と「2段飛ばして登る方法」があるとすると、「それぞれの方法の組み合わせ」を調べるのにも再帰関数が使えます。

こうした「分割して考える」問題には、とても相性が良いのです。

7. プログラミング初心者がつまずくポイントと対策

7. プログラミング初心者がつまずくポイントと対策
7. プログラミング初心者がつまずくポイントと対策

PHPの再帰関数を初めて学ぶときに、よくあるつまずきポイントは以下のようなものです。

  • 関数の中で同じ関数を呼び出す仕組みがイメージしにくい
  • 何回も関数が呼ばれるので、頭が混乱する
  • 結果がなぜそうなるのかが見えづらい

対策としては、「紙に書いて流れを図にする」ことをおすすめします。

たとえばfibonacci(4)の流れを図にするとこうなります:

  • fibonacci(4)
    • fibonacci(3) + fibonacci(2)
      • fibonacci(2) + fibonacci(1) + fibonacci(1) + fibonacci(0)

このように、「どの数字を使って計算されているか」を丁寧に追いかけていくと、理解がぐっと深まります。

8. 再帰関数とフィボナッチ数列の組み合わせを活かす練習

8. 再帰関数とフィボナッチ数列の組み合わせを活かす練習
8. 再帰関数とフィボナッチ数列の組み合わせを活かす練習

最後に、再帰関数を使ったフィボナッチ数列の応用例として「1〜10番目までの値をすべて表示する」プログラムを紹介します。


for ($i = 0; $i <= 10; $i++) {
    echo fibonacci($i) . ", ";
}

このように、for文(ループ)と組み合わせることで、複数のフィボナッチ数を一気に表示できます。

まとめ

まとめ
まとめ

フィボナッチ数列は、プログラミング初心者が再帰関数を学ぶ題材として非常に適しています。なぜなら、「前の2つの値を足す」という明快なルールを、関数の中で繰り返して実現するからです。この記事では、PHPでの再帰関数の書き方や動作の仕組みを通して、数列の計算方法を丁寧に学んできました。 PHPにおける再帰関数は、自分自身を呼び出して処理を繰り返すという特徴があり、シンプルに見える記述で複雑な計算を実現できます。ただし、慣れないうちは何度も関数が呼び出される構造に戸惑うこともあります。そのため、目に見えるように「手書きで再帰の流れを図にする」ことが理解の近道になります。

PHPの再帰関数でフィボナッチ数列を出力する応用

たとえば、1〜10番目までのフィボナッチ数を一度に表示したい場合、ループ文を使って次のように組み合わせることができます。


function fibonacci($n) {
    if ($n === 0) {
        return 0;
    } elseif ($n === 1) {
        return 1;
    } else {
        return fibonacci($n - 1) + fibonacci($n - 2);
    }
}

for ($i = 0; $i <= 10; $i++) {
    echo fibonacci($i) . ", ";
}

実行すると「0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55,」と出力され、各インデックスに対応する値が正しく表示されることがわかります。 再帰関数の強みは、このように複雑な繰り返し処理を簡潔に表現できる点です。しかし、呼び出し回数が多くなると処理速度が遅くなる可能性があるため、大きな数値を扱うときには注意が必要です。 今後、階乗の計算や木構造の探索などでも再帰が使える場面が増えていくので、基本の考え方をしっかりと理解しておくことが大切です。

先生と生徒の振り返り会話

生徒

「再帰関数って、難しそうに見えてたけど、フィボナッチ数列みたいな規則のあるものだと考えやすいですね!」

先生

「そうですね。最初のうちは戸惑うかもしれませんが、再帰は同じ処理を何度も繰り返すようなときに、とても力を発揮しますよ。」

生徒

「最初はfibonacci(6)って呼び出してるのに、中でfibonacci(5)やfibonacci(4)がさらに何度も呼ばれるのを見て、すごく不思議でした。」

先生

「実際に計算の流れを図に描いてみると、ひとつひとつの再帰の動きがよく見えてきます。理解するには視覚化が効果的です。」

生徒

「for文と組み合わせて複数のフィボナッチ数を出すやり方もすごく便利ですね!配列みたいに扱えるのが新鮮でした。」

先生

「実は、もっと効率よく計算する方法もあるんですよ。メモ化再帰や動的計画法(DP)といったテクニックを使うと、処理速度が一気に上がります。興味が出たらぜひ調べてみてくださいね。」

生徒

「なるほど…再帰関数の入り口として、今日のフィボナッチ数列の勉強はすごく良い練習になりました!」

先生

「その調子です!再帰関数をしっかり理解しておくと、今後のアルゴリズム学習にも必ず役立ちますよ。」

この記事を読んだ人からの質問

この記事を読んだ人からの質問
この記事を読んだ人からの質問

プログラミング初心者からのよくある疑問/質問を解決します

PHPのフィボナッチ数列って何ですか?どういう規則で作られますか?

PHPで扱うフィボナッチ数列とは、「前の2つの数を足して次の数を作る」規則の数列です。たとえば「0、1、1、2、3、5、8…」と続きます。

PHPでフィボナッチ数列を再帰関数で書くメリットは何ですか?

PHPで再帰関数を使うことで、同じ処理の繰り返しを簡潔に記述でき、数列のようなパターンを再帰的に処理するのにとても適しています。

PHPの再帰関数とはどういうものですか?初心者向けに教えてください

PHPの再帰関数とは、自分自身を呼び出す関数のことです。同じ処理を繰り返すのに便利で、数列計算などでよく使われます。
コメント
コメント投稿は、ログインしてください

まだ口コミはありません。

PHP の関数の記事一覧へ
新着記事
New1
Gemini
GeminiでPHPコードを学ぶ方法!初心者向けに始め方と学習手順を解説
New2
PHP
PHP のセッション変数を保存・取得・削除する方法
New3
PHP
PHP のコンストラクタ(__construct)とは?使い方を解説
New4
Claude
ClaudeでPythonデバッグを解決する方法!Pythonデバッグのエラーメッセージを長いログから読み解く方法
人気記事
No.1
Java&Spring記事人気No1
Python
Pythonでディレクトリを作成・削除・一覧表示する方法!初心者向けにosとpathlibを使った使い方を解説
No.2
Java&Spring記事人気No2
Gemini
GeminiでPython自動化を始める時の質問文!目的と前提を伝えるコツ
No.3
Java&Spring記事人気No3
PHP
PHP のフォームデータの受け取り($_POST, $_GET)を完全解説!初心者向けガイド
No.4
Java&Spring記事人気No4
Claude
ClaudeにPHPコードをレビューしてもらう方法!安全性と保守性を同時に確認するチェックリスト
No.5
Java&Spring記事人気No5
Claude
Claudeを使ったPythonコードレビューの進め方!設計意図と処理の流れを表で確認する質問例
No.6
Java&Spring記事人気No6
Gemini
GeminiにPHPエラーを相談する時のコードの貼り方!原因特定を早めるコツ
No.7
Java&Spring記事人気No7
PHP
PHP のインストール方法(Windows・Mac・Linux)と開発環境
No.8
Java&Spring記事人気No8
Python
Pythonで文字列が数値か判定する方法!isdigit()・isnumeric()の違い