1. 迭代算法
long int pow(long int X, unsigned int N)
{
long int val = 1;
for(int i = 0; i < N; i++)
val *= X;
return val;
}
2. 递归算法
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 * X, N / 2) * X;
}
递归算法原理:
N为偶数: X^N = X^(N/2) * X^(N/2)
N为奇数: X^N = X^(N/2) * X^(N/2) * X
比如 X^10 = X^5 * X^5, X^5 = X^2 * X^2 * X, X^2 = X^1 * X^1。
3. 二者比较
&

本文探讨了两种求幂的方法:迭代和递归。递归算法在空间复杂度上为O(logN),时间复杂度也为O(logN),如计算X^10只需4次乘法,而迭代算法则需要N次乘法。虽然递归在小规模时更快,但当N很大时可能导致空间问题。通过二进制表示和优化,可以将递归转换为迭代,进一步降低空间需求,保持O(logN)的时间复杂度。
最低0.47元/天 解锁文章
687

被折叠的 条评论
为什么被折叠?



