题目翻译:
实现pow(x, n).
递归分治
如果n是偶数,pow(x, n)=pow(x, n/2)*pow(x, n/2).
如果n是奇数,pow(x, n)=pow(x, n/2)*pow(x, n/2)*x.
同时,针对n大于0和n小于0做分类讨论,时间复杂度为O(logn),空间复杂度为O(1)。。
class Solution {
public:
double myPow(double x, int n) {
if(x==0)
return 0;
if(n==0)
return 1.0;
if(n==1)
return x;
if(n < 0)
return 1/getPow(x,-n);
return getPow(x,n);
}
double getPow(double x, int n)
{
double halfpow=myPow(x,abs(n/2));
if(n&0x0001)
return halfpow*halfpow*x;
return halfpow*halfpow;
}
};
注:本博文为EbowTang原创,后续可能继续更新本文。如果转载,请务必复制本条信息!
原文地址:http://blog.csdn.net/ebowtang/article/details/50371678
原作者博客:http://blog.csdn.net/ebowtang
本文介绍了一种使用递归分治策略实现快速幂运算的方法。该方法通过判断指数n的奇偶性来降低计算复杂度,当n为偶数时,pow(x,n)=pow(x,n/2)*pow(x,n/2);当n为奇数时,pow(x,n)=pow(x,n/2)*pow(x,n/2)*x。此外,文章还特别考虑了n为负数的情况,并给出了完整的C++代码实现。
574

被折叠的 条评论
为什么被折叠?



