65,186
社区成员




double myPow(double x, long long n)
{
double sum=1.0;
if(n==0)
{
return 1;
}
if(n>0)
{
while(n--)
{
sum*=x;
}
return sum;
}
if(n<0)
{
int m=-n;
while(m--)
{
sum*=x;
}
return 1/sum;
}
}
double mypow(double x,long long n)
{
if(n==0)
{
return 1;
}
if(n<0)
return 1/mypow(x,-n);
if(n%2==0)
{
return mypow(x,n>>1)*mypow(x,n>>1);
}
else
{
return mypow(x,n>>1)*mypow(x,n>>1)*x;
}
}
其中myPow为循环,mypow为递归。自己写的时候,用的是循环,但是提交的时候显示时间超时,就查了下百度,基本都是用递归的,我在vs2010的debug模式下测试了一下,在小于10的9次方时,循环比递归快了一点,但是10的9次方后递归反而快了。感觉很奇怪,一直感觉递归要比循环慢很多。为什么递归在pow中会比循环快?以下是测试的代码int main(void)
{
clock_t start=clock();
double x=myPow(2.0,1000000000000);
clock_t end=clock();
double a=(double)(end-start)*1000/CLOCKS_PER_SEC;
}