求次幂的快速算法

除了使用系统给的求次幂的方法,我们还可以使用一下方法去求次幂。

方法一 二分幂
使用递归求n/2的幂。
代码如下。

func Power(base float64 ,exponent int) float64 {
    //二分幂
    if exponent ==0{
        return 1
    }
    if exponent == 1{
        return base
    }
    //递归求一半的次幂
    ans := Power(base,exponent/2)
    ans = ans * ans
//最后在判断是奇数还是偶数
    if exponent %2 ==0{
        return ans
    }
    return ans * base
}

方法二 快速幂方法


image

具体的步骤如上图所示。
代码如下。

import "math"
func Power(base float64 ,exponent int) float64 {
        //快速幂
        a := int(math.Abs(float64(exponent)))
        flag := 1
        r := 1.0
        for a != 0{
            if  a & flag == 1{
                r = r * base
            }
            base = base * base
            a = a >> 1
        }
    if exponent < 0 {
        return 1 / r
    }
        return r
}

你可能感兴趣的:(求次幂的快速算法)