JavaScriptで整数の加法持続性(桁合計の繰り返し回数)を求める方法
本記事では、正の整数を受け取り、その加法持続性(additive persistence)を返すJavaScript関数の実装方法を解説します。
加法持続性とは?
整数 n の加法持続性とは、その数値を各桁の数字の合計で置き換える操作を、結果が1桁の整数になるまで繰り返す必要がある回数のことです。
例として、次の数値を見てみましょう。
1679583
この数値に対して桁合計を繰り返し適用すると、以下のようになります。
1 + 6 + 7 + 9 + 5 + 8 + 3 = 39 // 1回目 3 + 9 = 12 // 2回目 1 + 2 = 3 // 3回目
3回の操作で1桁の数値「3」に到達できたため、この場合の出力は 3 となります。
コード例
実際の実装コードは以下の通りです。
const num = 1679583;
// 各桁の合計を再帰的に求める関数
const sumDigit = (num, sum = 0) => {
if(num){
return sumDigit(Math.floor(num / 10), sum + num % 10);
};
return sum;
};
// 加法持続性を求める関数
const persistence = num => {
num = Math.abs(num);
let res = 0;
while(num > 9){
num = sumDigit(num);
res++;
};
return res;
};
console.log(persistence(num));コードの解説
sumDigit 関数
sumDigit は再帰呼び出しを使用した関数です。num % 10 で最下位の桁を取り出し、Math.floor(num / 10) で残りの桁に進みながら、全桁の合計を累積していきます。引数 sum のデフォルト値を 0 に設定することで、最初の呼び出し時に初期化を意識せずに済む設計になっています。
persistence 関数
persistence 関数では、まず Math.abs() によって負の数にも対応できるようにしています。その後、while ループで数値が2桁以上(9より大きい)である間、sumDigit を呼び出して桁合計への置き換えを繰り返し、その回数をカウントします。数値が1桁になった時点でループを抜け、置き換えを行った回数を返します。
実行結果
コンソールには以下のように出力されます。
3
このように、再帰関数とループを組み合わせることで、加法持続性の計算をシンプルかつ効率的に実装できます。大きな桁数の整数でも問題なく動作するため、数学的なパズルやアルゴリズム学習の題材としても最適です。
-
JavaScriptで文字列を分割する3つの方法とは?【split()・スプレッド演算子・Array.from()】
JavaScriptで文字列を個々の文字に分割する方法は、主に3つあります。1つ目は従来から使われているstring.split()メソッドによる方法、残りの2つはES6(ECMAScript 2015)で導入されたスプレッド演算子とArray.from()メソッドを使う方法です。それぞれの使い方を詳しく見ていきましょう。 1. String.split() split()は最も古典的で広く使われている方法です。引数に空文字列 を渡すことで、文字列を1文字ずつに分割し、配列として取得できます。 構文 string.split(); 使用例 次の例では、string.split()メソッ
-
JavaScriptで小数を検証するには?正規表現を使った実装例を解説
JavaScriptで小数を検証する方法 JavaScriptで、ユーザーが入力した値が正しい小数(小数点を含む数値)かどうかを判定したい場面はよくあります。そんなときに便利なのが正規表現です。本記事では、match()メソッドと正規表現を組み合わせて、入力値が小数かどうかを検証する方法を、具体的なコード例とともにわかりやすく解説します。 使用する正規表現パターン 今回の検証では、以下の正規表現を使用します。 /^[-+]?[0-9]+\.[0-9]+$/ このパターンの各要素の意味は次のとおりです。 ^[-+]?:文字列の先頭に符号(+ または -)が付いていても、付いていなくてもマッチ