高效率的取幂运算(递归解法跟非递归解法)
1. 递归解法
时间复杂度为 O(logN)
long int
Pow( long int x, unsigned int n ) { // 求幂运算
if( n == 0 )
return 1;
if( n == 1 )
return x;
if( n % 2 == 0 )
return Pow( x * x, n / 2 );
else
return Pow( x, n - 1 ) * x; // 可以用下列的注释行替换
//return Pow( x * x, n / 2 ) * x;
}
2. 非递归解法
两种非递归的解法来进行快速的取幂运算
(1) 第一种解法:
long int
Pow( long int x, unsigned int n ) { // 求幂运算
int y, mul, temp;
if( n == 0 )
return 1;
if( n == 1 )
return x;
y = x, mul = 1;
while( n > 1 ) {
if( n % 2 == 0 ) {
temp = y * y;
y = temp;
n = n / 2;
}
else {
mul *= y;
n = n - 1;
}
}
y = mul * y;
return y;
}
(2) 第二种解法:
long int
Pow( long int x, unsigned int n ) { // 求幂运算
int y, mul, temp;
if( n == 0 )
return 1;
if( n == 1 )
return x;
y = x, mul = 1;
while( n > 1 ) {
if( n % 2 == 0 ) {
temp = y * y;
y = temp;
n = n / 2;
}
else {
mul = mul * y;
temp = y * y;
y = temp;
n = n / 2;
}
}
y = mul * y;
return y;
}