其他分享
首页 > 其他分享> > LeetCode50. Pow(x, n)

LeetCode50. Pow(x, n)

作者:互联网

LeetCode50. Pow(x, n)

题目描述

/**
     * 
     * 实现 pow(x, n) ,即计算 x 的 n 次幂函数(即,x^n)。
     * 
     */

思路分析

  1. 使用递归的思路,每次将平方的结果再平方,可节省大量时间
  2. pow(x, n)函数实质是 n 个 x 相乘,如果n为偶数,可以通过每次平方上次平方计算的结果
  3. 如果n为奇数,则还要考虑 最后的结果再乘一次 x
  4. 从右往左依次 除2计算
  5. 递归思路:不要去考虑过多栈调用的细节问题,明白递归就是用来简化复杂问题的
  6. 注意递归结束条件,否则会形成死循环
  7. 源码如下

源码及分析

/**
     *
     * @param x  要计算的底数
     * @param n  制数部分
     * @return   返回计算的结果
     */
    public double myPow(double x, int n) {
        //如果n为负数,则只需要取正数幂的倒数即可
        long N = n;
        //判断n的正负,如果n为正数,则直接计算,否则取倒数
        return N >= 0 ? calculate(x, N) : 1.0 / calculate(x, N);
    }
    /**
     * 编写方法,假设N为正整数,计算x^N
     * @param x  底数
     * @param N  假设N为正数,计算x 的N次方
     * @return   返回计算的结果
     */
    public double calculate(double x, long N) {
        //递归结束的条件
        if (N == 0) {
            return 1.0;
        }
        //递归调用
        double y = calculate(x, N / 2);
        //如果N为偶数,则返回 y * y 如果N为奇数,则还有乘以x
        return N % 2 == 0 ? y * y : y * y * x;
    }

标签:return,calculate,递归,Pow,param,计算,double,LeetCode50
来源: https://www.cnblogs.com/mx-info/p/14824533.html