實(shí)現(xiàn)函數(shù)double Power(double base, int exponent)腥泥,求base的exponent次方匾南。不得使用庫函數(shù),同時(shí)不需要考慮大數(shù)問題蛔外。
/**
* 數(shù)值的整數(shù)次方
* 實(shí)現(xiàn)函數(shù)double Power(double base, int exponent)蛆楞,求base的exponent次方溯乒。不得使用庫函數(shù),同時(shí)不需要考慮大數(shù)問題豹爹。
* 拆分的方式裆悄,即x的n次冪,可以看成是x*x的n/2次冪臂聋,不過需要判斷n是奇數(shù)還是偶數(shù)光稼,如果是奇數(shù),則需要再乘以一個(gè)x
* 以此類推孩等,如果n是奇數(shù)艾君,那么n/2是偶數(shù),那么n/4就是奇數(shù)肄方,此時(shí)將x*x看成是base冰垄,則x的n次冪可以看成是
* x*(x*x)^(n/2)=x*((x*x)*(x*x*x*x)^(n/4))
* 比如x=2,n=11权她,那么可以看成是2*(2*2)^(11/2)虹茶,而在程序中,11/2=5伴奥,遞歸得到
* 2*((2*2)*(2*2*2*2)^(5/2))写烤,此時(shí)5/2=2,再一次遞歸拾徙,則將(2*2*2*2)看成是本次遞歸的base
* 2*((2*2)*((2*2*2*2)*(2*2*2*2))^(2/2))
* 計(jì)算方式洲炊,其實(shí)就是通過遞歸的方式,將base做平凡尼啡,而將次冪除以2暂衡,如果次冪除以2之后得到的是一個(gè)奇數(shù),則在計(jì)算的時(shí)候需要優(yōu)先乘以一個(gè)base
* @param x
* @param n
* @return
*/
private boolean isNegative = false;
public double myPow(double x, int n) {
if (n == 0) {
return 1;
}
if (n == 1) {
return x;
}
if (n < 0) {
n = -n;
isNegative = true;
}
double power = myPow(x * x, n / 2);
// 如果n是奇數(shù)崖瞭,則需要再乘以一個(gè)
if (n%2 != 0) {
power = power * x;
}
// 如果n是負(fù)數(shù)狂巢,則需要取反
return isNegative?1/power:power;
}