计算X的N次方,最明显的算法是使用N-1次乘法自乘,但是使用递归算法更好,分奇偶分别处理。
long pow(long x, long n)
{
if( n ==0 )
return 1;
if( n ==1 )
return x;
if(isEven(n))
return pow(x*x, n/2);
else
return pow(x*x, n/2)*x;
}
算法分析:
程序的时间复杂度是O(logN)
第5行到第6行是不必要的,因为如果N是1,那么第10行将做同样的事。
第10行还可以写成下面所示而不影响程序的正确性。
return pow(x, n-1)*x;
参考:《数据结构与算法分析C++描述》