では「再帰を使わないと書きにくい実用例」を紹介してみます。
実用例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まとめ
- ループは「回数が決まっている繰り返し」に強い。
- 再帰は「入れ子構造」「木構造」「深さが不明な探索」に強い。
