Pow(x,n)是实现x的n次幂
自己写时的思路:当n小于0时,我们把n去反,就可以使用相同的nm()函数,最后再用1除就好了,但是,在第291个列子没有跑成功,0.00001的2147483647次方显然栈溢出了。
看完讲解后对自己的程序进行改正:快速幂加递归。
x的64次方:x→x2→x4→x8→x16→x32→x64;可见偶数直接求出N/2即可,而奇数需要再乘以一个x。
代码如下:
class Solution {
public:
double myPow(double x, int n) {
long long N=n;
return N>=0 ? quickly(x,N) : (1.0/quickly(x,-N));
}
double quickly(double x,long long N)
{
if(N==0) return 1.0;
double y= quickly(x,N/2);
return N%2==0 ? y*y : y*y*x;
}
};
运用以上解法就可以解决栈溢出的情况了。
小白,勿喷。