JavaScript | 再帰関数

JavaScript JavaScript
スポンサーリンク

それでは「再帰を使うと逆に読みにくくなる例」を見てみましょう。
再帰は便利ですが、必ずしも「短い=分かりやすい」ではないんです。


例1:単純なカウントアップ

ループ版(シンプル)

for (let i = 1; i <= 10; i++) {
  console.log(i);
}
JavaScript

再帰版(わざわざ複雑)

function countUp(n, current = 1) {
  if (current > n) return;
  console.log(current);
  countUp(n, current + 1);
}

countUp(10);
JavaScript

👉 違い

  • ループは1行で済む。
  • 再帰は「終了条件」「引数の管理」が必要で、かえって長くなる。

例2:配列の合計(小さな配列)

ループ版

const arr = [1, 2, 3, 4, 5];
let sum = 0;
for (let i = 0; i < arr.length; i++) {
  sum += arr[i];
}
console.log(sum); // 15
JavaScript

再帰版

function sumArray(arr, i = 0) {
  if (i === arr.length) return 0;
  return arr[i] + sumArray(arr, i + 1);
}

console.log(sumArray([1, 2, 3, 4, 5])); // 15
JavaScript

👉 違い

  • 配列が小さいならループの方が直感的。
  • 再帰は「関数呼び出しのオーバーヘッド」があり、パフォーマンス的にも不利。

再帰が読みにくくなる典型パターン

  • 繰り返し回数が明確な処理(例: 1から100まで数える)
  • 単純な集計や走査(例: 配列の合計、平均)
  • 深さが浅い処理(ネストがない or 1段階だけ)

まとめ

  • ループの方が読みやすい場面
    • 回数が決まっている繰り返し
    • 単純な処理(合計、カウント、表示など)
  • 再帰の方が読みやすい場面
    • 深さが不明な入れ子構造(フォルダ、ツリー、ネスト配列)
    • 問題を「同じ形に分割」できる処理(探索、分割統治アルゴリズム)

👉 ここまでで「再帰の得意・不得意」が見えてきました。

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