题目

牛客网

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

解题思路

  1. 当 n 为偶数时,$$a^n = a^{n/2} * a^{n/2}$$
  2. 当 n 为奇数时,$$a^n = a^{n/2} a^{n/2} a$$
  3. 可以利用类似斐波纳切的方式,利用递归来进行求解
1. public double Power(double base, int exponent) {
2. if (base == 0) {
3. return 0;
4. }

6. if (base == 1) {
7. return 1;
8. }

10. int t_exponent = Math.abs(exponent);

12. double t = PositivePower(base, t_exponent);

14. return exponent > 0 ? t : 1 / t;
15. }

17. private double PositivePower(double base, int exponent) {
18. if (exponent == 0) {
19. return 1;
20. }

22. if (exponent == 1) {
23. return base;
24. }

26. double t = PositivePower(base, exponent >> 1);
27. t *= t;
28. if ((exponent & 0x01) == 1) {
29. t *= base;
30. }

32. return t;
33. }