JavaScript | 再帰関数

JavaScript JavaScript
スポンサーリンク

では「再帰を使わないと書きにくい実用例」を紹介してみます。

実用例1:フォルダの中身を全部表示する

パソコンのフォルダって、中にさらにフォルダが入っていて…と入れ子構造になっていますよね。
ループだけだと「深さがいくつあるか分からない」ので大変ですが、再帰ならシンプルに書けます。

function showFiles(folder) {
  for (const item of folder) {
    if (Array.isArray(item)) {
      showFiles(item); // サブフォルダなら再帰
    } else {
      console.log(item); // ファイルなら表示
    }
  }
}

const myFolder = ["file1.txt", ["sub1", ["deep.txt"]], "file2.txt"];
showFiles(myFolder);
// file1.txt
// sub1
// deep.txt
// file2.txt
JavaScript

実用例2:迷路の探索

迷路を「上下左右に進んでゴールを探す」処理も、再帰で書くと自然です。

  • 今の位置がゴールなら終了。
  • そうでなければ、行ける方向に進んで再帰的に探索。

(実際の迷路ゲームやパズルのアルゴリズムでよく使われます)


実用例3:WebページのDOMツリーをたどる

ブラウザのHTMLは「入れ子の木構造」になっています。
再帰を使うと、すべての要素を順番に処理するのが簡単です。

function traverse(node) {
  console.log(node.tagName); // 要素名を表示
  for (const child of node.children) {
    traverse(child); // 子要素を再帰的に処理
  }
}
JavaScript

まとめ

  • ループは「回数が決まっている繰り返し」に強い。
  • 再帰は「入れ子構造」「木構造」「深さが不明な探索」に強い。
タイトルとURLをコピーしました