0
点赞
收藏
分享

微信扫一扫

Python每日一练-----python实现Pow(x,y)

梦幻之云 2022-05-06 阅读 108

☀(day48:P45)

目录

📝题目:

🚩题目分析:

💡解题思路:

🌟解法一:快速幂+递归

🌈代码实现

✏代码注释 

🌟解法二:快速幂 + 迭代

🌈代码实现

✏代码注释 


📝题目:

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

⭐示例 1:

⭐示例 2:

⭐示例 3:

🚩题目分析:

对于C语言中的pow(x,y),表示x的y次方。我们当然可以使用python的次方算法,x ** y,也表示x的y次方。下面我们介绍其他计算x的y次方的两种方法。

💡解题思路:

🌟解法一:快速幂+递归

🌈代码实现

def myPow(x, n):
    def quickMul(N):
        if N == 0:
            return 1.0
        y = quickMul(N // 2)

        return y * y if N % 2 == 0 else y * y * x

    return quickMul(n) if n >= 0 else 1.0 / quickMul(-n)

✏代码注释 

def myPow(x, n):
    def quickMul(N):
        if N == 0:  # 递归边界条件
            return 1.0
        y = quickMul(N // 2)  # 用递归计算 y = x^(n//2)
        
        return y * y if N % 2 == 0 else y * y * x  # 实际上y的值在这里计算 
    
    # 如果时负次幂则转换成正幂,再将结果用分式计算得到正确答案
    return quickMul(n) if n >= 0 else 1.0 / quickMul(-n)  

🌟解法二:快速幂 + 迭代

🌈代码实现

def myPow(x, n):
    def quickMul(x, n):
        to_square = x
        ans = 1
        while n > 0:
            if n % 2 == 1:
                ans *= to_square
            to_square *= to_square
            n //= 2
        return ans

    return quickMul(x, n) if n >= 0 else 1 / quickMul(x, -n)

✏代码注释 

def myPow(x, n):
    def quickMul(x, n):
        to_square = x
        
        # x所占的初始值为 x
        ans = 1
        while n > 0:
            if n % 2 == 1:  # 判断最低位是否为1
                ans *= to_square
            # 因为下面我们不断舍弃最低为,则下一个最地位对应上一个to_square的平方
            # 所以我们将to_square不断地平方
            to_square *= to_square
            
            # 使用整除舍弃 n 二进制表示的最低位,这样我们每次只要判断最低位即可
            n //= 2
        return ans

    return quickMul(x, n) if n >= 0 else 1 / quickMul(x, -n)

今天就到这,明天见。🚀

❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄end❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄

举报

相关推荐

0 条评论