O(logn)的乘方算法

一般的乘方算法,时间复杂度是O(n)

通过下面的方式,能达到O(logn)——

递归实现:

int Power(int num, int exponent)
{
    if (1 == exponent) {
        return num;
    }

    if (0 == exponent) {
        return 1;
    }

    int result = 0;
    if (exponent & 1) {//if exponent is odd
        result = num * Power(num * num, exponent >> 1);
    } else {//if exponent is even
        result = Power(num * num, exponent >> 1);
    }
    return result;
}

非递归实现:

int Power(int num, int exponent)
{
    int result = 1;
    while (exponent) {
        if (exponent & 1) {
            result *= num;
        }
        num *= num;
        exponent = exponent >> 1;
    }
    return result;
}
原文地址:https://www.cnblogs.com/wolves-dave/p/3284671.html