实现 pow(x, n) ,即计算 x 的 n 次幂函数。
//感想:自己也是菜的不行,我竟然把这个当成那种需要位运算的那种题解求什么乘法这类的题目,大错特错。
还是看了答案,发现自己好像刷过这道题,或者是非常相似的一道,看完我就感觉特别熟悉。。。
//题解:快速幂,对于一个pow(x,n)来说求x的n次幂,如果n是偶数比如是4,那么相当于是两个2相乘也就是说 n^4=n^2*n^2,也就是说现在只需要求出n^2就可以了
如果n为奇数的话也是差不多的,比如说n为5 x^5=x^2*x^2*x也就说还是求出x^2,比上面多乘了一个x
那么n一直往下走,是不是就变成递归了,走到2,然后走到1,1/2就变成0了,那么x^0是不是就等于1.0了,所以递归的终止条件就出来了,当n==0的时候直接return 1.0.
就这样一直向上返回的话,返回到最上面的那个n,那么答案也就出来了,递归的返回也就借宿了。
下面是代码:
1 class Solution { 2 public double myPow(double x, int n) { 3 4 if(n<0) 5 { 6 x=1/x; 7 n=-n; 8 } 9 return fastPow(x,n); 10 } 11 public double fastPow(double x,int N) 12 { 13 if(N==0) 14 return 1.0; 15 double half=fastPow(x,N/2); 16 if(N%2==0) 17 return half*half; 18 else 19 return half*half*x; 20 } 21 }