☀(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❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄