分治法求解x的n次方

Divide-and-conquer algorithm in multiplication

\[x^n=x\cdot x\cdot x\cdots x \]

时间复杂度为O(n),有n-1个乘法

\[x^n=x^\frac n2\cdot x^\frac n2\qquad\mbox{if x is even}\\ x^n=x^\frac{n-1}{2}\cdot x^\frac{n-1}{2}\cdot x\qquad\mbox{if x is odd} \]

变成了两个相同的子问题和一次乘法

\(T(N)=T(N/2)+\Theta(1)\)

时间复杂度为:\(T(N)=O(\log_2 n)\)

C语言实现:

int divide(int x, int n) {
    if (n == 1 || n == 0) // 递归出口,
        return x;
    else {
        if (n % 2 == 0) // 如果是偶数
            return divide(x, n / 2) * divide(x, n / 2);
        else // 如果是奇数
            return divide(x, (n + 1) / 2) * divide(x, (n - 1) / 2);
    }
}
posted @ 2022-04-08 14:44  里列昂遗失的记事本  阅读(432)  评论(0)    收藏  举报