050 Pow(x,n)
题目:
实现 pow(x, n) ,即计算 x 的 n 次幂函数。
示例 1:
输入: 2.00000, 10
输出: 1024.00000
示例 2:
输入: 2.10000, 3
输出: 9.26100
示例 3:
输入: 2.00000, -2
输出: 0.25000
解释: 2-2 = 1/22 = 1/4 = 0.25
说明:
-100.0 < x < 100.0
n 是 32 位有符号整数,其数值范围是 [−231, 231 − 1] 。
如果用最普通的循环,没这么简单,会超时,可以用递归和迭代来解这题
方法一:迭代
思路:for循环中初始值设为n,每次除2,再判断i是否是2的倍数,如果不是就让res乘以x,然后让x再变成平方,如果为2的倍数,则不res乘x,让x变为平方即可
ps:每次n缩小一半,x变大一倍,判断是否该乘x,这样就减少很多时间
代码:
public static double myPow(double x, int n) {
double res=1.0;
for (int i=n; i!=0 ; i/=2) {
if(i%2!=0) res*=x;
x*=x;
}
return n<0?1/res:res;
}
方法二:递归法
思路:x的n次方,可以针对n的奇偶进行讨论,如果是偶数则让x变为自身的平方,将n变为原来的一半,一直这样直到n为0;如果是奇数,则将n减一,在函数外再乘以x即可
代码:
public static double myPow(double x, int n){
if(n==0) return 1;
if(n<0){
return 1/myPow(x,-n);
}
if(n%2==1){
return x*myPow(x,n-1);
}
return myPow(x*x,n/2);
}