Java 二进制运算符的操作数类型错误'^';
尝试为java课程创建一个将双精度值提升为int幂的递归方法。说明中说“但是,编写代码时,当n为偶数时,方法将返回(x^(n/2))^2。” 这就是我迄今为止所做的:Java 二进制运算符的操作数类型错误'^';,java,recursion,Java,Recursion,尝试为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
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));
}
}
^
是异或运算符,而不是幂。对电源使用Math.pow()
也就是说,我认为你没有抓住练习的重点
您应该返回powerFaster(x,n/2)*powerFaster(x,n/2)当n
为偶数时(实际上进行一次递归调用,将其结果存储在变量中并将其自身相乘)
在Java中,应该使用将值x
提升到n
^
是一个运算符-有关详细信息,请参见此^
是按位异或,与整数一起使用:
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
,因为这是您试图替换的函数
要得到一个值的平方,可以执行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;
}
另一方面,不要忘记Math.pow是一个非常繁重的操作,如果您只对正方形或立方体使用它,那么最好使用*运算符,甚至循环
带*操作员的Mult需要4毫秒
Mult和math pow用了717毫秒
带for循环的Mult需要4ms
仅在测试中使用多维数据集操作,执行了一百万次谢谢您的回答,并让我知道其他的花絮。我想我应该为那个部分实现一个递归方法,但我不确定最好的方法。你的问题是什么?旁注应该是注释而不是答案。很遗憾,我没有足够的因果报应来评论:/
Math.pow(2.0, 1.0) //gives you 2.0
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