The algorithm used is exponentiation squared . It is divided into two parts, for a positive integer n

Therefore, the above function for an even exponent returns
power(x, y/2)*power(x, y/2);
and for an odd exponent returns
x*power(x, y/2)*power(x, y/2);
It will calculate power in order of log(n) time.
For 2 5 it will be executed as:
5 is odd, so return 2*power(2, 5/2)*power(2, 5/2) will be executed.5/2 = 2 , however, return power(2, 2/2)*power(2, 2/2) will be executed.2/2 = 1 is odd, so return 2*power(2, 1/2)*power(2, 1/2) is executed.1/2 = 0 , the basic condition, so for both power(2, 1/2) , 1 will be returned.
So,
return 2*power(2, 1/2)*power(2, 1/2) returns 2*1*1 = 2 to its caller.return power(2, 2/2)*power(2, 2/2) returns 2*2 = 4 to its caller.return 2*power(2, 5/2)*power(2, 5/2) returns 2*4*4 = 32 to its caller.
A more efficient version will be
int power(int x, unsigned int y) { if( y == 0) return 1; int t = power(x, y/2); // power is called only once instead of twice. if (y%2 == 0) return t*t; else return x*t*t; }
source share