JavaScriptで再帰を使って数値の最大の桁を求める方法
本記事では、数値を受け取り、その中で最も大きい桁の数字を返すJavaScriptの再帰関数の実装方法を解説します。
例えば、次のような数値が与えられた場合を考えてみましょう。
45654356
この場合、戻り値として 6 が返されることが期待されます。
実装コード
以下が実際のコード例です。
const num = 45654356;
const greatestDigit = (num = 0, greatest = 0) => {
if(num){
const max = Math.max(num % 10, greatest);
return greatestDigit(Math.floor(num / 10), max);
};
return greatest;
};
console.log(greatestDigit(num));出力結果
コンソールには以下のように出力されます。
6
コードの解説
この関数がどのように動作するのか、ステップごとに見ていきましょう。
1. デフォルト引数の設定
関数は2つの引数を受け取ります。第1引数は処理対象の数値 num、第2引数はそれまでに見つかった最大の桁を保持する greatest です。greatest の初期値は 0 に設定されているため、最初の呼び出し時には第2引数を省略できます。
2. 再帰による桁の走査
num が0より大きい間(真値である間)、以下の処理を繰り返します。
num % 10: 剰余演算子を使うことで、数値の一番右の桁(下一桁)を取り出せます。Math.max(): 取り出した桁とこれまでの最大値greatestを比較し、大きい方を新しい最大値とします。Math.floor(num / 10): 数値を10で割って小数点以下を切り捨てることで、一番右の桁を削除した状態にして、自分自身を再度呼び出します。
3. 終了条件
すべての桁を処理して num が 0 になると、if文の条件が偽となり、蓄積されてきた greatest(つまり最大の桁)が最終的な戻り値として返されます。
処理の流れイメージ
greatestDigit(45654356, 0) → 桁「6」と0を比較 → 最大値は6 → greatestDigit(4565435, 6) → 桁「5」と6を比較 → 最大値は6のまま → ... 以下同様に繰り返し ... → greatestDigit(0, 6) → 6を返す
このように、再帰呼び出しごとに数値の末尾の桁を一つずつ処理していくことで、シンプルかつ効率的に最大の桁を見つけることができます。
-
JavaScriptで数値が三角数かどうかを判定する方法
三角数(Triangular Number)とは? 三角数とは、点を正三角形の形に敷き詰めたときに現れる数のことです。n番目の三角数は「1からnまでの自然数の合計」として表され、次の公式で求められます。 Tn = n(n+1) / 2 具体的な三角数は 1, 3, 6, 10, 15, 21, 28 … と続きます。例えば 10 は、各辺に4個の点を配置した正三角形を構成できるため、三角数です。 問題 数値を引数として受け取り、その数値が三角数であれば true を、そうでなければ false を返すJavaScript関数を実装します。 判定の考え方 n(n+1)/2 = num となる正
-
JavaScriptで1/nの循環小数(循環節)の長さを求める方法
問題数値 num を第一引数(かつ唯一の引数)として受け取るJavaScript関数を作成します。この関数には、次の2つの役割があります。まず、その数が10と互いに素(共通の約数が1のみ)であるかどうかを判定します。互いに素でない場合は -1 を返します。10と互いに素である場合は、1をその数で割ったときに小数部が循環する桁数(循環節の長さ)を返します。たとえば、関数への入力が次の場合を考えてみましょう。入力const num = 123;出力const output = 5;出力の解説123は2でも5でも割り切れないため、確実に10と互いに素です。そして1を123で割ると、次のようになります