实现 pow(x, n)
简介
即计算 x 的 n 次幂函数。
示例 1:
输入: 2.00000, 10
输出: 1024.00000
思路:
首先排除暴力,速度太慢。所以用快速幂。有口诀:同底数幂相乘,底数不变,指数相加幂的幂,底数不变,指数相乘.对于n是偶数的话就X的n/2次乘X的n/2次即可。如果是奇数的话就需要再乘以一个X。例如X的5次需要X² * X² *X才可以。这里使用递归实现,算到 n == 0后一直回退到结果。
代码
class Solution {
public double myPow(double x, int n) {
long N = n;
if(N < 0){
x = 1/x;
N = -N;
}
return fastPow(x,N);
}
public double fastPow(double x,long n){
if(n == 0){
return 1.0;
//即最终的half为1.0
}
double half = fastPow(x,n/2);
if(n % 2 != 0){
return half * half * x;
}else{
return half * half;
}
}
}