二元运算符'^'的错误​​操作数类型

时间:2016-04-14 06:38:12

标签: java recursion

尝试创建一个递归方法,将一个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));
         }
     }

5 个答案:

答案 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

仅在测试中使用立方体操作,完成了一百万次