JavaScript
 Computer >> コンピューター >  >> プログラミング >> JavaScript

JavaScriptでべき乗を計算する関数の実装方法|m^nを返す数学関数

はじめに

本記事では、2つの数値 m と n を引数として受け取り、m の n 乗(m^n)を計算して返す JavaScript 関数の実装方法を解説します。組み込みの Math.pow() を使わずに、再帰処理を活用した効率的なアルゴリズムで実装していきます。

処理のイメージ

たとえば、m = 4、n = 3 の場合、以下のように計算されます。

power(4, 3) = 4^3 = 4 × 4 × 4 = 64
power(6, 3) = 216

コード例

以下が power() 関数の実装です。再帰呼び出しを用いることで、簡潔かつ高速にべき乗を求められます。

const power = (m, n) => {
    if(n < 0 && m !== 0){
        return power(1/m, n*-1);
    };
    if(n === 0){
        return 1;
    }
    if(n === 1){
        return m;
    };
    if (n % 2 === 0){
        const res = power(m, n / 2);
        return res * res;
    }else{
        return power(m, n - 1) * m;
    };
};
console.log(power(4, 3));
console.log(power(6, 3));

出力結果

コンソールには次のように表示されます。

64
216

コードの仕組み

この実装は「高速べき乗(バイナリ法)」と呼ばれる手法に基づいています。各分岐の役割は以下の通りです。

  • n が負の数の場合:底が 0 以外であれば、底を 1/m に、指数を絶対値に変換して再帰的に計算します(例:4^-3 → (1/4)^3)。
  • n が 0 の場合:任意の数の 0 乗は 1 となるため、そのまま 1 を返します。ここが再帰の終了条件のひとつです。
  • n が 1 の場合:m^1 は m 自身なので、m を返します。
  • n が偶数の場合:m^n = (m^(n/2))^2 という性質を利用し、半分の指数で計算した結果を 2 回掛け合わせます。これにより指数が一気に半減します。
  • n が奇数の場合:m^n = m^(n-1) × m として、指数を 1 減らして偶数にしてから m を掛けます。

単純なループで m を n 回掛ける方式では計算量が O(n) になりますが、この再帰的アプローチでは指数を半分ずつ減らせるため、計算量は O(log n) に抑えられます。そのため、指数が非常に大きい場合でも高速に結果を得られるのが大きなメリットです。

  1. JavaScriptのMath.sin()関数の使い方を解説

    Math.sin()関数とはJavaScriptのMathオブジェクトが提供するsin()関数は、引数として受け取った角度(ラジアン単位)の正弦(サイン)の値を返します。サインは三角関数の一つで、直角三角形における斜辺と対辺の比率を表すものです。波形の生成、アニメーション、ゲーム開発、信号処理など、幅広い分野で活用されています。構文Math.sin()関数の構文は以下のとおりです。Math.sin(角度)引数にはラジアン単位の角度を指定します。度数法(90°など)で表された角度をラジアンに変換する場合は、「度 × (Math.PI / 180)」という計算式を使用します。使用例次の例では、90

  2. JavaScriptのMath.cosh()関数とは?使い方とサンプルコードを解説

    JavaScriptのMathオブジェクトが提供するcosh()メソッドは、引数として受け取った角度(ラジアン単位)の双曲線余弦(ハイパボリックコサイン)の値を返します。双曲線余弦は、三角関数の余弦(cos)と似た性質を持つ関数で、数学や物理学の分野、特に懸垂線(カテナリー曲線)の計算などでよく利用されます。なお、度数法ではなくラジアンで値を指定する点に注意してください。構文cosh()メソッドの基本的な構文は以下のとおりです。Math.cosh(90)引数には数値(ラジアン単位の角度)を指定します。使用例次のコードでは、90ラジアンの双曲線余弦の値を計算し、画面に表示しています。<ht