美文网首页
50. Pow(x,n)

50. Pow(x,n)

作者: Jason_Shu | 来源:发表于2019-01-01 21:34 被阅读0次

Pow(x, n)就是求x的n次幂,当然我们可以直接使用库函数,但是这样的话,你的面试要凉凉了。

第一种思路:暴力求解法。一层循环累乘即可。

第二种思路:分治&递归。x的n(偶数)次方可以分解为两个x的n/2次方,如果是奇数的时候就首先单独提一个x出来,这样就可以把n变为偶数了。终止条件自然是n=1的时候。同时要考虑下n<0时候的一些转换。

// 递归版本
function myPow(x, n) {
    if(n < 0) {
        return 1 / myPow(x, -n);
    }
    if( n === 0 ) return 1;
    if( n === 1) return x;

   // 如果n为奇数
    if(n % 2) return x * myPow(x, n -1);

    // 其余就都是偶数情况
    return myPow(x * x, n / 2);
}

// 非递归版本
function myPow(x, n) {
    if(n < 0) {
        n = -n;
        x = 1 / x;
    }
    if(n === 0) return 1;
    if(n === 1) return x;

    let pow = 1;

    while(n) {
        // 如果n为奇数, 先单独乘一个x
        if(n % 2) {
            pow = pow * x;
            n = n - 1;  // 提出去后,自然把n减去一个
        }
        // 剩余都是偶数情况
        x = x * x;
        n = n / 2;
    }

    return pow;
}

相关文章

网友评论

      本文标题:50. Pow(x,n)

      本文链接:https://www.haomeiwen.com/subject/ywsolqtx.html