在《Fibonacci数计算中的两个思维盲点及其扩展数列的通用高效解法》提到了一维的求解m^n.
算是比较快的,作个备份。
最基本的求解,没有考虑为负数的情况,下同
int pow0(int m,unsigned int n)
{
int result = 1;
while(n >0)
{
result *= m;
--n;
}
return result;
}
改进版求解
迭代
int pow1(int m, unsigned int n)
{
int result = 1;
int factor = m;
while (n) {
if (n & 1)
result *= factor;
factor *= factor;
n >>= 1;
}
return result;
}
非递归版的求解
int pow3(int m, unsigned int n)
{
if (n == 0)
return 1;
unsigned flag = n;
//小等于n的最大的2的k次幂
for (unsigned value = n; value &= (value - 1); flag = value)
;
int result = m;
while (flag >>= 1) {
result *= result;
if (n & flag)
result *= m;
}
return result;
}
只有原文扩展到高维的求解,暂时没有读懂。