Algorithm 1:time complexity O(N)
double pow(double x, long n)
{
if(n==0)
return 1; /*when n=0 whatever the x is,the pow is 1*/
if(n==1)
return x; /*when n=1 the result is x itself*/
else
{
double tempa=1.0000;
while(n--)
tempa=tempa*x;
return (tempa); /*every time make n-- then multiply a xto get the result*/
}
}
Algorithm 2:time complexity O(log(N))
double pow(double x, long n)
{
if(n==0)
return 1; /*when n=0 whatever the x is,the pow is 1*/
if(n==1)
return x; /*when n=1 the result is x itself*/
double temp=1.0;
while(n)
{
if(n%2) temp*=x; /*when n is odd*/
x*=x;
n/=2;
}
return temp;
}
Algorithm 3:time complexity O(log(N))
double pow(double x, long n)
{
if(n==0)
return 1; /*when n=0 whatever the x is,the pow is 1*/
if(n==1)
return x; /*when n=1 the result is x itself*/
if(n%2==0)
return pow(x*x,n/2); /*when n is an even increase x to x*x and decrease n to n/2*/
else
return pow(x*x,n/2)*x; /*when n is an odd increase x to x*x and decrease n to n/2 an then multiply x*/
}
Actually,algorithm 2 is a iterative version of algorithm 3,while algorithm is a recursive version.