• 求x的幂乘可以利用x^n = (x ^ 2) ^ (n / 2)的性质,用反复平方法快速求出 :

    pow(x, n)

    • 1 (n=0时)
    • pow(x * x, n / 2) (n为偶数时)
    • pow(x * x, n / 2) * x (n为奇数时)
  • 例如:2^11展开如下所示:

    • 2^11 = ((2 * 2) ^ 5) * 2
    • 4^5 = ((4 * 4) ^ 2) * 4
    • 8^2 = (8 * 8) ^ 2
    • 16^2 = (16 * 16) ^ 1
    • 256^1 = ((256 * 256) ^ 0) * 256
    • 65536^0 = 1
  • 递归反复平方法

    pow(x, n)
    	if(n == 0) return 1;
    	if((n & 1) == 0)
    		return pow(x * x, n / 2);
    	else
    		return pow(x * x, n / 2) * x;
    
    //C++实现
    constexpr double mypow(double x, uint32_t n) noexcept
    {
    	return (n == 0) ? 1 : ((n & 1) == 0) ?
    					pow(x * x, n / 2) : 
    					(pow(x * x, n / 2) * x);
    }