例:实现 pow(x, n) ,即计算 x 的 n 次幂函数(即,xn)。不得使用库函数,同时不需要考虑大数问题。
计算2的10次方,最基础的想法是连续计算,将2连续乘十次,而使用快速幂算法则只需要五次。
当n为负数时,我们可以计算 x的−n次方再取倒数得到结果,因此我们只需要考虑 n 为自然数的情况。
1.当我们要计算x的n次方时,我们可以先递归
的计算出y=x的n/2次方;
2.如果n为偶数,那么x的n次方=y的平方;如果n为奇数,那么x的n次方=y的平方乘x;
3.递归的边界为n==0,结果为1
class Solution {
public:
double quickMul(double x, long long N) {
if (N == 0) {
return 1.0;
}
double y = quickMul(x, N / 2);
return N % 2 == 0 ? y * y : y * y * x;
}
double myPow(double x, int n) {
long long N = n;
return N >= 0 ? quickMul(x, N) : 1.0 / quickMul(x, -N);
}
};