题目描述

实现 pow(x, n) ,即计算 x 的 n 次幂函数。

示例1:

输入: 2.00000, 10
输出: 1024.00000

示例2:

输入: 2.00000, -2
输出: 0.25000
解释: 2-2 = 1/22 = 1/4 = 0.25

思路

1.一个数的负数幂等于1除以这个数的正数幂,例如:2^-4 = 1/(2^4)*。
2.若N是偶数,则 x^N = (x^N/2 )
(x ^ N/2);若N是奇数,则 x^N = (x^N/2 )* (x ^ N/2)*x。
3.所有自然数的0次幂等于1.0。
4.可以使用递归,快速求出x的N次幂。

Java代码实现

    public double myPow(double x, int n) {
        x = n >= 1 ? x : (1.0/x);
        return myPowFast(x,Math.abs(n));
    }

    private double myPowFast(double x ,int n){
        if(n == 0)
            return 1.0;
        double half = myPowFast(x,n/2);
        if(n % 2 == 0)
            return half*half;
        else 
            return half*half*x;
    }

Golang代码实现

func myPow(x float64, n int) float64 {
    if n == 0{
        return 1.0
    }
    flag := false
    if n<0 {
        n = -n
        flag = true
    }
    res := 0.0
    half := myPow(x,n/2)
    if n%2 == 0{
        res = half*half
    }else {
        res = half*half*x
    }
    if flag{
        res = 1/res
    }
    return res
}