JavaScript | 再帰とループの性能比較

JavaScript JavaScript
スポンサーリンク

それでは「ファイルシステム探索」を題材にして、再帰版ループ版を比較してみましょう。実際の開発でも「ディレクトリの中身を全部調べる」「特定のファイルを探す」といった処理はよく出てきます。


再帰版(直感的)

const fs = require("fs");
const path = require("path");

function walkDir(dir) {
  const files = fs.readdirSync(dir);
  for (const file of files) {
    const fullPath = path.join(dir, file);
    const stat = fs.statSync(fullPath);

    if (stat.isDirectory()) {
      walkDir(fullPath); // 再帰で潜る
    } else {
      console.log(fullPath);
    }
  }
}

walkDir("./test"); // 例: ./test ディレクトリを探索
HTML

👉 「ディレクトリならもう一度呼ぶ」というルールだけでシンプルに書ける。


ループ版(スタックを自分で管理)

const fs = require("fs");
const path = require("path");

function walkDirLoop(root) {
  const stack = [root];

  while (stack.length > 0) {
    const dir = stack.pop();
    const files = fs.readdirSync(dir);

    for (const file of files) {
      const fullPath = path.join(dir, file);
      const stat = fs.statSync(fullPath);

      if (stat.isDirectory()) {
        stack.push(fullPath); // 自分でスタックに積む
      } else {
        console.log(fullPath);
      }
    }
  }
}

walkDirLoop("./test");
HTML

👉 再帰を使わない場合は「自分でスタックを持って管理」する必要がある。


✅ 比較まとめ

観点再帰版ループ版
コード量短い長い
可読性ツリー構造を直感的に表現スタック管理が必要で複雑
柔軟性子がある限り自然に潜れる自分で「積む/取り出す」を制御
安全性深すぎるとスタックオーバーフロー安定して大量データも処理可能

結論

  • 再帰版 → 「構造をそのまま表現」できるので読みやすい。
  • ループ版 → 「大量の階層」でも安全に処理できる。

👉 ここまでで「ファイルシステム探索」を通じて、再帰とループの実務的な違いを体感できました。
次は「再帰を使ったアルゴリズム設計の思考法(どうやって再帰的に分解するか)」を整理してみると、さらに応用力がつきます。

タイトルとURLをコピーしました