16. 数值的整数次方

NowCoder

题目描述

给定一个 double 类型的浮点数 base 和 int 类型的整数 exponent,求 base 的 exponent 次方。

解题思路

下面的讨论中 x 代表 base,n 代表 exponent。 16. 数值的整数次方 - 图1

因为 (x*x) 可以通过递归求解,并且每次递归 n 都减小一半,因此整个算法的时间复杂度为 O(logN)。

  1. public double Power(double base, int exponent) {
  2. if (exponent == 0)
  3. return 1;
  4. if (exponent == 1)
  5. return base;
  6. boolean isNegative = false;
  7. if (exponent < 0) {
  8. exponent = -exponent;
  9. isNegative = true;
  10. }
  11. double pow = Power(base * base, exponent / 2);
  12. if (exponent % 2 != 0)
  13. pow = pow * base;
  14. return isNegative ? 1 / pow : pow;
  15. }

16. 数值的整数次方 - 图2