分割統治法を使用したべき乗の計算方法


#include <iostream>
double power(double x, int n) {
    if (n == 0) {
        return 1.0; // x^0 = 1
    }

    if (n < 0) {
        return 1.0 / power(x, -n); // x^-n = 1 / x^n
    }

    double halfPower = power(x, n / 2); // x^(n/2)

    if (n % 2 == 0) {
        return halfPower * halfPower; // x^n = (x^(n/2))^2
    } else {
        return x * halfPower * halfPower; // x^n = x * (x^(n/2))^2
    }
}
int main() {
    double x;
    int n;

    std::cout << "Enter the value of x: ";
    std::cin >> x;

    std::cout << "Enter the value of n: ";
    std::cin >> n;

    double result = power(x, n);

    std::cout << x << " raised to the power of " << n << " is: " << result << std::endl;

    return 0;
}

上記のコードでは、power関数が分割統治法を使用してべき乗を計算しています。関数は再帰的に定義されており、以下の手順で動作します。

  1. nが0の場合、x^0は常に1なので1.0を返します。
  2. nが負の場合、x^-nは1 / x^nと等しいので、再帰的にpower(x, -n)を呼び出して結果を逆数にします。
  3. nが偶数の場合、x^nは(x^(n/2))^2と等しいので、再帰的にpower(x, n/2)を呼び出してその結果を2乗します。
  4. nが奇数の場合、x^nはx * (x^(n/2))^2と等しいので、再帰的にpower(x, n/2)を呼び出してその結果を2乗し、xを掛けます。

メイン関数では、ユーザーにxとnの値を入力してもらい、power関数を呼び出して結果を表示しています。

この方法は、べき乗の計算を効率的に行うための分割統治法の一例です。再帰的な呼び出しを使用するため、大きなべき乗でも効率的に計算することができます。また、負のべき乗や浮動小数点数への対応もしています。

このコード例を使用することで、分割統治法を活用してべき乗を計算する方法を理解し、応用することができます。また、他の言語でも同様のアプローチを使用してべき乗を計算することができます。