尝试创建一个递归方法,将一个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)
如果你这样做是为了速度,你想避免使用,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)
^是按位异或,与整数一起使用:
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)
| 归档时间: |
|
| 查看次数: |
1397 次 |
| 最近记录: |