Implement pow(x, n).
题意不说了,假如使用连乘,肯定会超时,这里使用了递归去计算。
代码如下:
/*
* 使用递归去计算,而不要是用乘法做连乘
* */
public class Solution
{
public double myPow(double x, int n)
{
if(n==0)
return 1;
boolean flag=(n>0)? true : false;
double res= getPow(x,Math.abs(n));
res = flag ?res:1/res;
return res;
}
public double getPow(double x, int n)
{
if(n==0)
return 1;
else
{
double v=getPow(x, n/2);
if(n%2==0)
return v*v;
else
return v*v*x;
}
}
}
下面是C++的代码,就是一个分治算法的典型应用
代码如下:
#include <iostream>
#include <cmath>
using namespace std;
class Solution
{
public:
double myPow(double x, int n)
{
if (n == 0)
return 1;
bool flag = n > 0 ? true : false;
double res = getPow(x,abs(n));
res = flag ? res : 1 / res;
return res;
}
double getPow(double x, int n)
{
if (n == 0)
return 1;
else
{
double v = getPow(x, n / 2);
if (n % 2 == 0)
return v*v;
else
return v*v*x;
}
}
};