关于算法power
一般我们遇到要实现power算法,最直接就是如下实现:
Int power(int x, unsigned int n)
{
Int result = 1;
While(n--)
result *= x;
return result;
}
然而,这样计算的复杂度为O(n)
想要改进,因为 x^n = x^(n/2) * x^(n/2),所以我们想,只要计算出了x^(n/2)那么x^n也就直接得出了,于是改为如下实现:
Int power(int x, unsigned int n)
{
if(n == 0)
Return 1;
else if(n==1)
return x;
else
{
Int r = power(x, n/2);
If(n % 2 == 0)
Return r*r
Else
Return r*r*x;
}
}
既然走到了这里,且我们看到了递归,那继续优化的方法就是不使用递归,因为递归不仅可能导致内存栈溢出,还会产生很多不必要的计算。
这里,我们可能会想到斐波那契数列,教科书中讲解递归总是拿这个例子,但我们知道递归并非最优。于是我们按照将斐波那契数列递归形式