二元运算符'^'的坏操作数类型

Ant*_* D. 6 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));
         }
     }
Run Code Online (Sandbox Code Playgroud)

Era*_*ran 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));
     }
 }
Run Code Online (Sandbox Code Playgroud)


Pet*_*rey 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;
}
Run Code Online (Sandbox Code Playgroud)

版画

512.0
Run Code Online (Sandbox Code Playgroud)


Ian*_*Ian 6

^是按位异或,与整数一起使用:

int a = 6; //00000110
int b = 5; //00000101
int c = a ^ b; //gives you 3 = 00000011, not 6^5
Run Code Online (Sandbox Code Playgroud)

操作处于二进制级别:

00000110 //a
00000101 //b
--------- XOR
00000011
Run Code Online (Sandbox Code Playgroud)

要执行电源,请使用Math.pow():

Math.pow(2.0, 1.0) //gives you 2.0
Run Code Online (Sandbox Code Playgroud)