题目
给定一个 double 类型的浮点数 base 和 int 类型的整数 exponent 。求 base 的 exponent 次方。
解题思路
- 当
n为偶数时,$$a^n = a^{n/2} * a^{n/2}$$ - 当
n为奇数时,$$a^n = a^{n/2} a^{n/2} a$$ - 可以利用类似斐波纳切的方式,利用递归来进行求解
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. }
