实现 ​​pow(xn)​​​ ,即计算 ​​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)

  1. 如果n为0,则返回1
  2. 如果n为1,则返回x
  3. 如果N == 2,则返回x*x
  4. 如果n小于0,则x = 1.0/x,且:
  1. 如果n为INT_MIN,则返回x*pow(x,(n+1)*-1),因为INT_MIN直接*-1会导致溢出
  2. 否则返回mypow(x,n*-1)
  1. n大于2
  1. 如果n为基数,返回 x*mypow(x,n-1)
  2. 如果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);
}
};