Pow(x, n),我的第一道算法题

本文介绍了一种使用Python实现的高效指数运算算法,重点讲解了myPow函数,通过二分法和递归简化计算过程,适用于计算浮点数的幂。特别关注了数的边界处理和复杂度优化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

"""
    @author: xbw
    @user: Administrator
    @time: 2021/4/15 0015/23:11
    @name: 指数算法
    @tool: PyCharm
"""

from math import floor

class Solution(object):
    def myPow(self, x, n):
        """
        :type x: float
        :type n: int
        :rtype: float
        """
        # 问题原始描述: x^n =x*x*x... 【其中数有0 和 1】
        # 一半的解为n/2: OlogN
        # 边界问题: 数的边界
        if x == 1 or n == 0:
            return 1

        # 数的边界转换:统一为非负情况
        n2 = n
        if n < 0:
            x = 1 / x
            n2 = -n

        # 二分法 x^n=x^n/2 * x^n/2 --而这个就一个递归
        return mulitDeep(x, n2)


def mulitDeep(x, n):
    # 定义出口
    if n == 1:
        return x

    if n % 2 != 0:
        # n=3, 上层是n=6 x*n=3个x, 就是还有一个x需要乘
        resuslt = mulitDeep(x, floor(n / 2))
        return x * resuslt * resuslt
    else:
        # n=4, n=2
        resuslt = mulitDeep(x, floor(n / 2))
        return resuslt * resuslt


if __name__ == '__main__':
    result = Solution().myPow(2, -3)
    print(result)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

松叔汇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值