尝试创建一个递归方法,将一个double值提升为java课程的int权限。指令说“但是,编写代码,以便当n为偶数时,方法将返回(x ^(n / 2))^ 2。”
这就是我到目前为止:
public static double powerFaster(double x, int n) {
if (n == 0) {
return 1;
}
else if ((n % 2) == 0) {
return ((x ^ (n / 2.0) ^ 2.0)); //Error occurs here.
} else {
return x * powerFaster(x, (n - 1));
}
}
答案 0 :(得分:16)
^
是XOR运算符,而不是幂。使用Math.pow()
获取权力。
那就是说,我认为你错过了演习的重点。
当return powerFaster(x, n/2) * powerFaster(x, n/2);
为偶数时,您应n
(实际进行一次递归调用,将其结果存储在变量中并将其自身相乘)。
public static double powerFaster(double x, int n) {
if (n == 0) {
return 1;
}
else if ((n % 2) == 0) {
double pow = powerFaster(x, n/2);
return pow * pow;
} else {
return x * powerFaster(x, (n - 1));
}
}
答案 1 :(得分:8)
如果你这样做是为了提高速度,你想避免使用Math.pow
,因为这是你要替换的功能。
要获得值的平方,您可以执行d * d
public static void main(String[] args) {
System.out.println(powerOf(2, 9));
}
public static double powerOf(double d, int n) {
if (n < 0) return 1 / powerOf(d, -n);
double ret = 1;
if (n > 1)
ret = powerOf(d * d, n / 2);
if (n % 2 != 0)
ret *= d;
return ret;
}
打印
512.0
答案 2 :(得分:6)
^
是按位异或,与整数一起使用:
int a = 6; //00000110
int b = 5; //00000101
int c = a ^ b; //gives you 3 = 00000011, not 6^5
操作处于二进制级别:
00000110 //a
00000101 //b
--------- XOR
00000011
要执行电源,请使用Math.pow()
:
Math.pow(2.0, 1.0) //gives you 2.0
答案 3 :(得分:4)
在Java中,您应该使用java.lang.Math.pow(double x, double n)将值x
提升为n
^
是XOR运算符 - 有关详细信息,请参阅此SO question
答案 4 :(得分:2)
另外请注意,Math.pow是一个非常繁重的操作,如果你只将它用于方形或立方体,你最好用*运算符甚至是循环
Mult with *运算符耗时4ms
Mult with math pow需要717ms
Mult with for loop花了4ms
仅在测试中使用立方体操作,完成了一百万次