#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
関数が分割統治法を使用してべき乗を計算しています。関数は再帰的に定義されており、以下の手順で動作します。
- nが0の場合、x^0は常に1なので1.0を返します。
- nが負の場合、x^-nは1 / x^nと等しいので、再帰的に
power(x, -n)
を呼び出して結果を逆数にします。 - nが偶数の場合、x^nは(x^(n/2))^2と等しいので、再帰的に
power(x, n/2)
を呼び出してその結果を2乗します。 - nが奇数の場合、x^nはx * (x^(n/2))^2と等しいので、再帰的に
power(x, n/2)
を呼び出してその結果を2乗し、xを掛けます。
メイン関数では、ユーザーにxとnの値を入力してもらい、power
関数を呼び出して結果を表示しています。
この方法は、べき乗の計算を効率的に行うための分割統治法の一例です。再帰的な呼び出しを使用するため、大きなべき乗でも効率的に計算することができます。また、負のべき乗や浮動小数点数への対応もしています。
このコード例を使用することで、分割統治法を活用してべき乗を計算する方法を理解し、応用することができます。また、他の言語でも同様のアプローチを使用してべき乗を計算することができます。