不难但是很经典的题目。迭代法需要在二进制找规律;递归则比较容易看出来。(2^n为步长,从右向左观察)
file

// 找规律,迭代法
func solve(x float64, n int) float64 {
    var result float64 = 1
    for ;n>0;x*=x{
        if n%2 == 1{
            result *= x
        }
        n = n>>1
    }
    return result
}

// 递归法
// func solve(x float64, n int) float64{
//     if n == 0{
//         return 1
//     }
//     result := solve(x, n>>1)
//     if n % 2 == 1{
//         return result*result*x
//     }else{
//         return result*result
//     }
// }

func myPow(x float64, n int) float64 {

    if n>=0{
        return solve(x, n)
    }else{
        return 1/solve(x, -n)
    }

}
最后修改日期: 2021年12月5日

作者

留言

撰写回覆或留言

发布留言必须填写的电子邮件地址不会公开。