在 math.pow 中使用递归来计算 java 中的幂
Using recursion in math.pow to calculate power in java
X^n = ( X^n / 2 )^2 如果 n > 0 且 n 为偶数
X^n = X * ( X^n / 2 )^2 如果 n > 0 且 n 为奇数
谁能给我这两个公式的 java 代码?我试着用它来做,但我的答案总是无穷大。
这是我的代码
代码:
import java.lang.*;
public class power4
{
double ans;
public double setpower(double x, double n) {
if (n == 0)
return 1;
else if (n % 2 == 0)
return Math.pow(setpower(x, n/2),2);
else
return x * (Math.pow(setpower(x, n/2),2));
}
}
Driver Class:
public class powerTester
{
public static void main(String[] args) {
power4 test4 = new power4();
System.out.print("2^0 -- ");
System.out.print(test4.setpower(2,0)+" ");
System.out.println();
System.out.print("2^1 -- ");
System.out.print(test4.setpower(2,1)+" ");
System.out.println();
System.out.print("2^2 -- ");
System.out.print(test4.setpower(2,2)+" ");
System.out.println();
System.out.print("2^3 -- ");
System.out.print(test4.setpower(2,3)+" ");
System.out.println();
System.out.print("2^4 -- ");
System.out.print(test4.setpower(2,4)+" ");
System.out.println();
System.out.print("2^5 -- ");
System.out.print(test4.setpower(2,5)+" ");
}
}
输出:
Welcome to DrJava. Working directory is C:\Users\Nisarg\Desktop
> run powerTester
2^0 -- 1.0
2^1 -- Infinity
2^2 -- Infinity
2^3 -- Infinity
2^4 -- Infinity
2^5 -- Infinity >
这个公式
X^n = X * ( X^ (n / 2))^2
依赖于 n / 2
是奇数的整数除法。换句话说,它不需要 n ÷ 2
但实际上需要 (n - 1) ÷ 2
。通过将 n
作为 double
而不是整数,您可以准确地进行除法,而不是作为整数除法。
这样做的结果是,此递归仅在 n / 2
达到浮点精度极限时终止,此时您已经一遍又一遍地乘以 X
。因此,结果是一个非常大的数字;太大,无法存储在 double
.
中
要解决此问题,请将 setpower
方法的第一行更改为
public double setpower(double x, int n)
强制整数除法。
X^n = ( X^n / 2 )^2 如果 n > 0 且 n 为偶数
X^n = X * ( X^n / 2 )^2 如果 n > 0 且 n 为奇数
谁能给我这两个公式的 java 代码?我试着用它来做,但我的答案总是无穷大。
这是我的代码
代码:
import java.lang.*;
public class power4
{
double ans;
public double setpower(double x, double n) {
if (n == 0)
return 1;
else if (n % 2 == 0)
return Math.pow(setpower(x, n/2),2);
else
return x * (Math.pow(setpower(x, n/2),2));
}
}
Driver Class:
public class powerTester
{
public static void main(String[] args) {
power4 test4 = new power4();
System.out.print("2^0 -- ");
System.out.print(test4.setpower(2,0)+" ");
System.out.println();
System.out.print("2^1 -- ");
System.out.print(test4.setpower(2,1)+" ");
System.out.println();
System.out.print("2^2 -- ");
System.out.print(test4.setpower(2,2)+" ");
System.out.println();
System.out.print("2^3 -- ");
System.out.print(test4.setpower(2,3)+" ");
System.out.println();
System.out.print("2^4 -- ");
System.out.print(test4.setpower(2,4)+" ");
System.out.println();
System.out.print("2^5 -- ");
System.out.print(test4.setpower(2,5)+" ");
}
}
输出:
Welcome to DrJava. Working directory is C:\Users\Nisarg\Desktop
> run powerTester
2^0 -- 1.0
2^1 -- Infinity
2^2 -- Infinity
2^3 -- Infinity
2^4 -- Infinity
2^5 -- Infinity >
这个公式
X^n = X * ( X^ (n / 2))^2
依赖于 n / 2
是奇数的整数除法。换句话说,它不需要 n ÷ 2
但实际上需要 (n - 1) ÷ 2
。通过将 n
作为 double
而不是整数,您可以准确地进行除法,而不是作为整数除法。
这样做的结果是,此递归仅在 n / 2
达到浮点精度极限时终止,此时您已经一遍又一遍地乘以 X
。因此,结果是一个非常大的数字;太大,无法存储在 double
.
要解决此问题,请将 setpower
方法的第一行更改为
public double setpower(double x, int n)
强制整数除法。