在数据结构与算法分析这本书中,通过递归的方式求幂,其时间复杂度为O(LogN),其代码如下
long int;
pow(long int x, unsigned int N)
{
if(N==0)
return 1;
if(IsEven)
return Pow(x*x, N/2)
else
return Pow(x*x, N/2)*x
}
当把Pow(x*x, N/2)改为 Pow(x, N/2)*Pow(x, N/2)时其时间复杂度不再是O(LogN),而是N
原程序中,最多需要执行2LogN次乘法,将其改成Pow(x, N/2)*Pow(x, N/2)后,每次递归调用两次,可以看作是分成了两个子任务,因此所需要的乘法次数为
所以其大O值为 N