if n==0:
return 1
if n%2 == 0: #如果是偶数
return self.help_(x*x, n//2)
如果是奇数
return self.help_(x*x,(n-1)//2)*x
迭代代码如下:
‘’’
Python大型免费公开课,适合初学者入门
加QQ群:579817333 获取学习资料及必备软件。
‘’’
class Solution:
def myPow(self, x: float, n: int) -> float:
judge = True
if n < 0:
n = -n
judge = False
final = 1
while n>0:
if n%2 == 0:
x *=x
n //= 2
final *= x
n -= 1
return final if judge else 1/final
其实跟上面的方法类似,只是通过位运算符判断奇偶性并且进行除以2的操作(移位操作)。
代码如下:
class Solution:
def myPow(self, x: float, n: int) -> float:
judge = True
if n < 0:
n = -n
judge = False
final = 1
while n>0:
if n & 1: #代表是奇数
final *= x
x *= x
n >>= 1 # 右移一位
return final if judge else 1/final
类型二:求n开方
实现 pow(x, n),即计算 x 的 n 次幂函数。其中x大于0,n为大于1整数。
解法:二分法求开方
思路就是逐步逼近目标值。以x大于1为例:
-
设定结果范围为[low, high],其中low=0, high = x,且假定结果为r=(low+high)/2;
-
如果r的n次方大于x,则说明r取大了,重新定义low不变,high= r,r=(low+high)/2;
-
如果r的n次方小于x,则说明r取小了,重新定义low=r,high不变,r=(low+high)/2;
代码如下:
class Solution:
def myPow(self, x: float, n: int) -> float:
x为大于0的数,因为负数无法开平方(不考虑复数情况)
if x>1:
low,high = 0,x
else:
low,high =x,1
while True:
r = (low+high)/2
judge = 1
for i in range(n):
judge *= r
if x >1 and judge>x:break # 对于大于1的数,如果当前值已经大于它本身,则无需再算下去
if x <1 and judge<x:break # 与上类似
if abs(judge-x)<0.0000001: # 判断是否达到精度要求
最后
不知道你们用的什么环境,我一般都是用的Python3.6环境和pycharm解释器,没有软件,或者没有资料,没人解答问题,都可以免费领取(包括今天的代码),过几天我还会做个视频教程出来,有需要也可以领取~
给大家准备的学习资料包括但不限于:
Python 环境、pycharm编辑器/永久激活/翻译插件
python 零基础视频教程
Python 界面开发实战教程
Python 爬虫实战教程
Python 数据分析实战教程
python 游戏开发实战教程
Python 电子书100本
Python 学习路线规划
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!