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.