题目
题目链接
. - 力扣(LeetCode)
题目描述
代码实现
class Solution {
public:
double myPow(double x, int n) {
long t = n;
return t >= 0 ? _myPow(x, t) : 1 / _myPow(x, -t);
}
double _myPow(double x, int n){
if(n == 0) return 1;
double y = _myPow(x, n / 2);//算出幂的一半的值
return n % 2 == 0 ? y * y : y * y * x;
}
};
思路分析
我们这里用的是递归思路。这里可以将递归函数看作是一个黑盒,可以完成我们想要的需求,在本道题即能够算出幂的一半的值。
1、偶数次幂等于两个指数一半相乘。奇数次幂等于两个指数一半相乘再乘上一个底数。
2、当是一个负数的时候,将指数转换成为正数求出结果,然后再用1除以这个结果。
3、这个题指数的范围是-2的31次幂,所以int类型是存不下的,再开始的时候就将n转换成为long类型存储。
4、最后考虑递归出口,也就是指数等于0的时候,返回1即可。
可以参考下边的图示。