JavaScriptの再帰ループで0から指定した数値までを出力する方法
本記事では、JavaScriptにおいて再帰呼び出し(recursion)のみを使って数値を出力する関数の書き方を解説します。この関数は引数として数値を受け取り、0からその数値までの連続した整数をコンソールへ出力します。for文やwhile文などのループ構文は一切使わず、純粋な再帰だけで実装するのが条件です。
サンプルコード
コードは次のようになります。
const recursiveLoop = (counter) => {
if (counter > 0) {
recursiveLoop(counter - 1);
}
console.log(counter);
return counter;
};
recursiveLoop(5);
recursiveLoop(15);
recursiveLoop(25);
実行結果
コンソールには次のように出力されます。
// recursiveLoop(5) の場合 0 1 2 3 4 5 // recursiveLoop(15) の場合 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 // recursiveLoop(25) の場合 0 1 2 ... 23 24 25
仕組みの解説
一見シンプルな関数ですが、動作を正しく理解するにはいくつかのポイントがあります。
1. ベースケース(再帰の終了条件)
if (counter > 0) という判定がベースケースです。counter が 0 になるとそれ以上の再帰呼び出しは行われず、ここで再帰が停止します。ベースケースを定義しないと呼び出しが無限に続き、スタックオーバーフローが発生してしまうので注意してください。
2. 出力が昇順になる理由
recursiveLoop(5) を呼び出すと、まず recursiveLoop(4)、続いて recursiveLoop(3) と、内部では数値を減らしながら再帰が深くなっていきます。そして counter が 0 に達した時点で初めて console.log が実行され、呼び出しが戻る過程で 1、2、3…と順番に出力されていきます。つまり「再帰が先・出力が後」という順序のため、画面上には 0 から指定した数値までの昇順の数字が表示されるのです。
3. 注意点
再帰の深さには実行環境ごとの上限があるため、非常に大きな数値を渡すとスタックオーバーフローが発生する可能性があります。大きな範囲を扱う場合は、通常のループ処理への置き換えや、末尾呼び出し最適化が有効な環境での実装も検討するとよいでしょう。
-
JavaScriptでループ処理に遅延を追加する方法をわかりやすく解説
JavaScriptでループの各反復の間に遅延(待ち時間)を設けたい場合は、setTimeout() メソッドを使用します。この記事では、基本的な実装例から、より読みやすいモダンな書き方まで、コード例とともに解説します。 setTimeout()でループに遅延を追加する仕組み setTimeout() は、指定したミリ秒後にコールバック関数を一度だけ実行するメソッドです。ループ内で単に setTimeout(fn, 2000) と書くだけでは、すべてのタイマーがほぼ同時に登録されてしまい、意図した通りの遅延になりません。 そこでポイントとなるのが、遅延時間にループカウンタを掛け算するという手法
-
関数型プログラミングJavaScriptでループを継続する方法|some()メソッドの使い方
従来の for ループでは continue 文を使って特定の要素をスキップできますが、関数型プログラミングのスタイルでも同じような処理を行いたい場面があります。そんなときに便利なのが、Array.prototype.some() メソッドです。 some() メソッドは、配列の各要素に対してコールバック関数を順番に実行し、コールバックが true を返した時点で反復を終了します。逆に言えば、false を返し続ける限りループは継続されるため、これを利用することで continue 文のような「要素のスキップ」を実現できます。 実装例 <!DOCTYPE html> <htm