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

JavaScript JavaScript
スポンサーリンク

では「階乗(factorial)」を題材にして、再帰版ループ版を並べて練習してみましょう。


階乗の定義

  • ( n! = n \times (n-1) \times (n-2) \times \dots \times 1 )
  • 特別に ( 0! = 1 ) と定義されます。

ループ版

function factorialLoop(n) {
  let result = 1;
  for (let i = n; i > 0; i--) {
    result *= i;
  }
  return result;
}

console.log(factorialLoop(5)); // 120
JavaScript

👉 変数 result を用意して、n から 1 まで掛け算していく。
シンプルで効率的。


再帰版

function factorialRec(n) {
  if (n === 0) return 1;        // 終了条件
  return n * factorialRec(n - 1);
}

console.log(factorialRec(5)); // 120
JavaScript

👉 「n! = n × (n-1)!」という定義をそのままコードにした形。
直感的で短い。


✅ 比較まとめ

観点ループ版再帰版
コード量少し長い短い(定義通り)
可読性手続き的数学的に直感的
性能高速・省メモリ関数呼び出しの分だけ遅い
安全性安定深すぎるとスタックオーバーフロー

👉 ここまでで「同じ処理をループと再帰で書き分ける」練習ができました。

次の練習としては、「フィボナッチ数列」をループと再帰で書き比べると、再帰の弱点(計算の重複)と工夫(メモ化)がよく見えてきます。

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