快速幂(迭代和递归)
题目:实现 pow(x, n) ,即计算 x
的整数 n
次幂函数(即,xn
)
解法一:迭代
可以得出结论,我们需要在循环的过程中找到哪些额外贡献了x的地方,根据这个位置到结果的位置的次数进行平方,然后将结果累乘即可得出答案
class Solution {public double myPow(double x, int N) {//将N转变成long形,否则int类型的最小值转变成正数的时候会溢出long n=N;return n<0? 1/pow(x,-n):pow(x,n);}public double pow(double x,long n) {double ret=1.0;//对n进行拆分 while(n>0) {//末位是否为1,判断是否贡献了xif((n&1)==1) {ret*=x;}//x往左推的时候要x要不断平方x*=x;//n除以2n>>=1;}return ret;}
}
解法二:递归
class Solution {public double myPow(double x, int n) {return n<0? 1/pow(x,-n):pow(x,n);}public double pow(double x,int n) {if(n==0) return 1;//求出x的n/2次方double tmp=pow(x,n/2);return n%2==0?tmp*tmp:tmp*tmp*x;}
}