计算 x 的 n 次幂函数,不需要考虑大数问题。
示例 1:
输入:x = 2.00000, n = 10 输出:1024.00000
示例 2:
输入:x = 2.10000, n = 3 输出:9.26100
示例 3:
输入:x = 2.00000, n = -2 输出:0.25000 解释:2-2 = 1/22 = 1/4 = 0.25
提示:
-100.0 < x < 100.0
-231 <= n <= 231-1
-104 <= xn <= 104
代码如下:
double myPow(double x, long long n)
{double demp;
if(n==0)return 1;
else if(n>0)
{
if(n%2==1)return myPow(x,n-1)*x;
else {demp=myPow(x,n/2);return demp*demp;}
}
else
{ n=-n;
if(n%2==1)return 1/(myPow(x,n-1)*x);
else {demp=myPow(x,n/2);return 1/(demp*demp);}
} }
//利用递归实现快速幂。如果是2的倍数次方我们就把它对半分开成两部分,再把它们乘起来,如果不是2的倍数次方我们就求它的倍数次方减去1,转化成2的倍数次方,再乘以它本身一次即可。这样递归下去我们就实现了一个数求它很大的幂,变成了许多小的幂相乘。
PS:POW函数实际上是对指数函数的泰勒展开进行的近似求值,当指数很大时展开式也非常非常长,pow函数进行了大量运算,时间复杂度为o(0),而快速幂时间复杂度为o(logn)。