LeetCode Pow(x, n)

问题描述:

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

示例 1:
输入:x = 2.00000, n = 10
输出:1024.00000

示例 2:
输入:x = 2.10000, n = 3
输出:9.26100

示例 3:
输入:x = 2.00000, n = -2
输出:0.25000
解释:2-2 = 1/22 = 1/4 = 0.25

解题思路

分治的办法,将xn次方划分为x(n/2) * x(n/2),每次划分一半下去。直到n === 1,这之间的过程我们可以用递归进行实现,而边境的判断条件就是当n===0时。
时间复杂度分析,因为我们每次都是xn/2* xn/4 * xn/8* … * 1;
所以时间复杂度为o(log n);

var myPow = function(x, n) {
    if (n === 0){
        return 1
    }
    if (n < 0){
        return 1 / myPow(x, -n)
    }
    if (n % 2){
        return x * myPow(x , n - 1);
    }
    return myPow(x * x, n / 2);
};

代码分析:

1、函数定义:

var myPow = function(x, n) {

定义了一个函数 myPow,接收两个参数:x(底数,可以是小数),n(指数,可以是正数或负数)。

2、处理指数为零的特殊情况:

if (n === 0){
    return 1
}

当指数 n 为 0 时,根据幂的定义,任何非零数的 0 次幂都等于 1。

3、处理负指数:

if (n < 0){
    return 1 / myPow(x, -n)
}

当指数 n 为负数时,可以通过计算 x 的正指数次幂然后取其倒数来得到结果。这是一个有效的方法,因为 x-n 次幂等于 1 / xn

4、递归终止条件:
如果 n 是正数且不为 0,函数将进入递归计算。

5、处理奇数指数:

if (n % 2){
    return x * myPow(x , n - 1);
}

当指数 n 是奇数时,可以通过计算 xn - 1 次幂,然后与 x 相乘得到 xn 次幂。

6、递归计算:
如果 n 是偶数,函数将 x 与自身相乘(x * x),并将指数 n 除以 2,然后递归调用 myPow

7、递归公式:

  • return myPow(x * x, n / 2);
  • 这个公式利用了分治策略,将问题规模减半,直到指数变为 0。

8、递归基础案例:
当指数 n 变为 0 时,递归将终止,并开始返回计算结果。

9、返回结果:
函数最终返回 xn 次幂的结果。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值