LeetCode50. Pow(x, n)
Posted mx_info
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode50. Pow(x, n)相关的知识,希望对你有一定的参考价值。
LeetCode50. Pow(x, n)
题目描述
/**
*
* 实现 pow(x, n) ,即计算 x 的 n 次幂函数(即,x^n)。
*
*/
思路分析
- 使用递归的思路,每次将平方的结果再平方,可节省大量时间
- pow(x, n)函数实质是 n 个 x 相乘,如果n为偶数,可以通过每次平方上次平方计算的结果
- 如果n为奇数,则还要考虑 最后的结果再乘一次 x
- 从右往左依次 除2计算
- 递归思路:不要去考虑过多栈调用的细节问题,明白递归就是用来简化复杂问题的
- 注意递归结束条件,否则会形成死循环
- 源码如下
源码及分析
/**
*
* @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;
}
以上是关于LeetCode50. Pow(x, n)的主要内容,如果未能解决你的问题,请参考以下文章