Ваш метод использует O(N)
операции для вычисления мощности.
Возможно вычислить мощность в O(log(N))
операциях.
По этой причине он не самый эффективный.
Логика для преобразования его в O(log(N))
операций можно увидеть на https://en.wikipedia.org/wiki/Exponentiation_by_squaring.
Основная идея заключается вчто
Чтобы заставить эту логику работать, вам нужно переместить код, который вычисляет мощность, в положительное значение для его собственной функции, которая может бытьрекурсивный.
double myPowPositive(double x, int n) {
// Use the efficient algorithm.
}
double myPow(double x, int n) {
double result=1;
bool neg=false;
if(n<0)
{
n = -1*n;
neg=true;
}
result = myPowPositive(x, n);
if(neg)
{
result = 1/result;
}
return result;
}