在math.pow中使用递归来计算java中的功率

时间:2015-03-30 21:25:34

标签: java math recursion

X ^ n =(X ^ n / 2)^ 2,如果n> 0和n是偶数

如果n> 1,则

X ^ n = X *(X ^ n / 2)^ 2。 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));
  }
}

驱动程序类:

 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   > 

1 个答案:

答案 0 :(得分:0)

这个公式

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)

强制整数除法。