题目链接:
分析:也是数学问题的转换,这里要用到递归的思想,同时通过设置临时变量,减小了时间复杂度。
算法思路:题目需要实现某个元素的n次幂,这里可以通过递归的方法来求解。我们写一个临时函数命名为temp,来实现n次幂的部分功能。在函数体内部进行判断(传入N和x两个参数,分别表示所求的幂次和被求的数):
- 如果N为0,那么直接返回1.0即可,即任何数的零次幂都为1;
接下来定义一个临时变量test表示x的N/2次幂,对N进行判断:
- 如果N为偶数,那么结果为test*test;
- 如果N为奇数,那么结果为test*test*x;
情况理清楚以后,在主函数里面进行进一步的处理,判断是计算正数次幂还是负数次幂。
- 如果是正数次幂,那么直接计算即可;
- 如果是负数次幂,那么本质上就是把计算结果取倒数,即用1.0除以那个部分;
参考代码:
class Solution {
public:
double temp(double x,long long N){//一个递归函数
if(N==0)//结束条件
return 1.0;
double test=temp(x,N/2);//保存临时变量
if(N%2==0)//偶数次幂
return test*test;
else//奇数次幂
return test*test*x;
}
double myPow(double x, int n) {
long long N=n;
return N>=0?temp(x,N):1.0/temp(x,-N);//判断是正数次幂还是负数次幂
}
};