题目分析
x的n次方,常规思路是将x循环进行n次相乘
可以使用递归逐级相乘,将 n / 2 进行逐级递归,若是遇到奇数就先减一再除以2
特殊情况
- n为负数时是将 1/x 进行 n 次相乘
- n为0时,x恒等于1
代码如下
# Python3
class Solution:
def myPow(self, x: float, n: int) -> float:
if n<0:
return self.myPow(1/x, -n)
if n==0:
return 1
if n==2:
return x*x
return self.myPow(self.myPow(x, n/2), 2) if not n%2 else x*self.myPow(self.myPow(x,(n-1)/2),2)
//Java
public double myPow(double x, int n){
if (n == 0) return x=1;
else if (n > 0 && n % 2 == 0) return myPow(x * x, n / 2);
else if (n > 0) return myPow(x, n - 1) * x;
else return myPow(1 / x, -n);
}