leetcode算法题--数值的整数次方

原题链接:https://leetcode.cn/problems/shu-zhi-de-zheng-shu-ci-fang-lcof/description/?envType=study-plan-v2&envId=coding-interviews

使用快速幂算法

1、递归写法

func myPow(x float64, n int) float64 {
    if n >= 0 {
        return dfs(x, n)
    }
    return 1.0 / dfs(x, -n)
}

func dfs(x float64, n int) float64 {
    if n == 0 {
        return 1.0
    }
    r := dfs(x, n/2)
    if n%2 == 1 {
       return r * r * x 
    }
    return r * r
}

迭代写法

func myPow(x float64, n int) float64 {
    if n == 0 {
        return 1 
    }
    m := n
    if n < 0 {
       m = -1 * n 
    }
    var res float64 = 1 
    c := x
    for m > 0 {
        if m % 2 == 1 {
            res *= c 
        }
        c *= c 
        m /= 2
    }
    if n < 0 {
        res = 1 / res
    }
    return res
}

你可能感兴趣的:(Algorithm,算法,leetcode,深度优先)