实现 pow(x, n) ,即计算 x
的整数 n
次幂函数(即,xn
)。
示例 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
题解
递归解法
对于pow(x,n)
- 如果n为0,则返回1
- 如果n为1,则返回x
- 如果N == 2,则返回x*x
- 如果n小于0,则x = 1.0/x,且:
- 如果n为INT_MIN,则返回x*pow(x,(n+1)*-1),因为INT_MIN直接*-1会导致溢出
- 否则返回mypow(x,n*-1)
- n大于2
- 如果n为基数,返回 x*mypow(x,n-1)
- 如果n为偶数,返回mypow(x*x,n/2)
代码如下:
class Solution {
public:
double myPow(double x, int n) {
if (n == 0)
{
return 1;
}
if (n == 1)
{
return x;
}
if (n == 2)
{
return x * x;
}
if (n < 0)
{
x = 1.0/x;
if (n == INT_MIN)
{
return x*myPow(x,(n+1)*-1);// <-------- 防止溢出
}
return myPow(x,n*-1);
}
if (n % 2 == 1)
{
return x*myPow(x,n-1);
}
return myPow(x*x,n/2);
}
};