このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。

【JavaScript入門】再帰関数

再帰関数

 再帰関数(recursive function)とは、関数が自分自身を呼び出すことによって処理を繰り返す仕組みをいいます。プログラミングの一般的な概念で、JavaScript 固有の機能ではありません。再帰関数を使うと、繰り返し処理や階層構造の探索などを、コードを簡潔に書きやすいというメリットがあります。一方で、終了条件を正しく設計しないと無限ループ(スタックオーバーフロー)に陥ることもあるため、注意が必要です。

HTMLサンプルファイル:myRecursionExample.html

<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="utf-8">
  <title>myRecursionExample.html</title>
</head>
<body>
  <h1>再帰関数のサンプル</h1>
  <p>開発者ツールのコンソールを開いて、出力を確認してください。</p>

  <script>
    /**
     * 再帰関数: recursion
     * @param {number} n   - 初期値や現在の値
     * @param {number} max - 再帰を終了するしきい値
     */
    function recursion(n, max) {
      console.log(n);  // 現在の値を出力

      // nを2倍に更新
      n = n * 2;

      // 終了条件: n が max を超えたら終了
      if (n > max) {
        return;
      }

      // 自分自身を呼び出す(再帰)
      recursion(n, max);
    }

    // 実行例: 初期値 16、最大値 1000 で再帰関数を起動
    recursion(16, 1000);
  </script>
</body>
</html>

デバックコンソールの出力

16
32
64
128
256
512

 この例では、recursion() 関数内で n を 2倍し、 nmax を超えるまで再度同じ関数を呼び出す処理を行っています。再帰呼び出しが行われるたびに、JavaScript の実行コンテキストが追加され、終了条件を満たすと呼び出しが順次終了していく仕組みです。

  • 終了条件
    再帰関数を実装するときは、必ず再帰呼び出しを終わらせるための条件(n > max など)を用意します。これを怠ると、無限に再帰が続いてプログラムが停止しなくなる危険があります。
  • 活用例
    再帰関数は、たとえばツリー構造のデータを探索するときや、フィボナッチ数列・階乗などの数学的計算に便利です。ただし、大規模な再帰はスタックを消費するため、ループ構文などで書いた方が効率が良い場合もあります。

まとめ

  • 再帰関数とは「自分自身を呼び出す関数」のこと。
  • 再帰呼び出しによって、計算や探索を分割・再利用できるが、必ず終了条件を設定して、無限ループを防ぐ必要がある。
  • 再帰を使うことでコードを短く書ける反面、大きなデータや深い階層構造ではパフォーマンスやスタックサイズに留意が必要。

 再帰は「少しずつ問題を小さくし、最終的に終了条件で停止する」という考え方で、多くの再帰的アルゴリズムやデータ構造で活用できます。JavaScript においても、関数式やアロー関数など、さまざまな形で再帰関数を定義可能です。