1.递归
每次吧结果相乘
//递归快速幂
double myPow(double x, long long n) {
//x x2 x4 x8 x16*x
if(n >= 0){
return quickPow(x,n);
}else{
//n为负数情况
n=-n;
return 1.0/quickPow(x,n);
}
}
double quickPow(double x,long n){
if(n==0){
return 1;
}
double t=myPow(x,n/2);
if(n % 2 == 0){
return t*t;
}else{
return t*t*x;
}
}
2.迭代+位运算
//递推法
考虑吧n写成二进制,多项式推导之后发现
每次用x当前二进制位2的i次方
double myPow(double x, int n) {
double ans=1;
long N=n;
if(N<0){
N=-N;
x=1.0/x;
}
while(N){
if(N&1){
ans=ans*x;
}
//每次x值都会再*x 但是当二进制位为0时 不会和结果相乘
x=x*x;
N>>=1;
}
return ans;
}
标签:myPow,return,double,long,quickPow,ans,快速
From: https://www.cnblogs.com/lwx11111/p/16754272.html