/*
* 给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
* 思路:考虑将a^n问题分解成a^(n/2)问题,只要知道a^(n/2),然后平方就可以求出a^n;
* 同理,只要知道a^(n/4),然后平方就可以求出a^(n/2)....
* 依次类推,通过不断地分解来减小运算次数,算法使用递归实现,要注意n是奇数的情况要多乘一下a
*/
public class Power {
//函数求解
public double power(double base, int exponent) {
return Math.pow(base, exponent);
}
//传统求解方法:时间复杂度O(n)
public double power2(double base, int exponent) {
if(exponent == 0) {
return 1;
}
double result = 1;
for(int i = 1;i <= Math.abs(exponent);i ++) {
result = result * base;
}
return exponent > 0 ? result : 1 / result; //考虑指数为负的情况
}
//分解的方法:时间复杂度O(logn),以2为底
public double power3(double base, int exponent) {
if(exponent == 0) {
return 1;
}
if(exponent == 1) {
return base;
}
double result = power3(base, Math.abs(exponent) >> 1);
result *= result;
if(Math.abs(exponent) % 2 != 0) {
result *= base;
}
return exponent > 0 ? result : 1 / result;
}
public static void main(String[] args) {
System.out.println(new Power().power3(1.2, -2));
//System.out.println(1/1.44);
}
}
数值的整数次方
于 2018-01-27 14:34:24 首次发布