JavaScriptの再帰関数を使ってnまでの偶数の合計を求める方法
今回は、数値 n を引数として受け取り、n までのすべての偶数の合計を返す再帰関数をJavaScriptで作成していきます。
再帰とは、関数が自分自身を呼び出すことで処理を繰り返す手法です。ループ文を使わずに合計値を求められるため、再帰の仕組みを理解するのに最適な題材といえます。
コード例
const recursiveEvenSum = (num, sum = 0) => {
// 奇数の場合は1つ前の偶数に調整
num = num % 2 === 0 ? num : num - 1;
if(num){
return recursiveEvenSum(num - 2, sum + num);
}
return sum;
};
console.log(recursiveEvenSum(12));
console.log(recursiveEvenSum(122));
console.log(recursiveEvenSum(23));
console.log(recursiveEvenSum(10));
console.log(recursiveEvenSum(19));コードの解説
この関数の動作は以下の流れになっています。
- 偶数への調整: 最初に
num % 2 === 0で入力値が偶数かどうかを判定します。奇数だった場合はnum - 1で直近の偶数に合わせます。 - 再帰呼び出し:
numが0より大きい間、sum + numで現在の偶数を累積しながら、num - 2を渡して自分自身を呼び出します。これにより、偶数だけを順番に加算していきます。 - 終了条件(ベースケース):
numが0になるとif(num)が偽と評価され、蓄積されたsumを返して再帰が終了します。
出力結果
コンソールには次のように出力されます。
42 3782 132 30 90
計算の検証
recursiveEvenSum(12)→ 2+4+6+8+10+12 = 42recursiveEvenSum(23)→ 23は奇数なので22までの偶数を合計 = 132recursiveEvenSum(19)→ 19は奇数なので18までの偶数を合計 = 90
このように、引数が奇数でも正しく直前の偶数までの合計が求まることが確認できます。デフォルトパラメータ(sum = 0)を活用することで、呼び出し側は引数を1つ渡すだけで済む、シンプルで読みやすい実装となっています。
-
JavaScriptでスペース区切りの文字列内の数値を合計する方法
問題スペースで区切られた整数を含む文字列を受け取り、その中の各整数を数値に変換したうえで、合計値を返すJavaScript関数を作成する必要があります。解決のアプローチ基本的な処理の流れは次の3ステップです。split( ) メソッドで、文字列をスペースを基準に配列へ分割するmap(Number) で、配列の各要素を数値へ変換するreduce() を使って、配列内のすべての数値を合計するコード例以下が実際のコードです。const str = 1 5 12 76 2; { { acc + val); r
-
【C言語】再帰関数を使って2つの整数の最大公約数(GCD)を求める方法
問題 C言語において再帰関数を使用し、与えられた2つの整数の最大公約数(GCD:Greatest Common Divisor)を求めます。 解決策 再帰関数を用いて2つの整数の最大公約数を求めるには、「ユークリッドの互除法」が利用できます。これは「2つの数のGCDは、大きい方の数を小さい方の数で割った余りと、小さい方の数とのGCDに等しい」という性質を応用した手法です。この計算を余りが0になるまで再帰的に繰り返すことで、GCDを効率よく求めることができます。 アルゴリズム 再帰関数を使って2つの整数のGCDを求めるためのアルゴリズムは、以下の手順に従います。 ステップ1 − 再帰関数を