有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java计算任意指数的幂(负或正)

我想计算结果,给定任何指数(负或正)和整数类型的基数。我正在使用递归:

public static double hoch(double basis, int exponent) {
    if (exponent > 0) {
        return (basis * hoch(basis, exponent - 1));
    } else if (exponent < 0) {
        return ((1 / (basis * hoch(basis, exponent + 1))));
    } else {
        return 1;
    }
}

如果指数为负,则返回1.0,但这是错误的。例如,hoch(2,-2)应为0.25。有什么想法吗


共 (5) 个答案

  1. # 1 楼答案

    将底座提升至pos或neg底座的工作代码:

    FUNC Raise_To_Power
    
    LPARAMETERS pnBase, pnPow
    
    DO CASE
    
      CASE pnPow = 0
        RETURN 1  
      CASE pnPow > 0
        RETURN pnBase * Raise_To_Power(pnBase, pnPow-1)  
      CASE pnPow < 0
        RETURN 1 / (pnBase * Raise_To_Power(pnBase, -(pnPow+1)))
    
    ENDCASE
    
    ENDFUNC
    
  2. # 2 楼答案

     }else if(exponent < 0){
             return ((1/(basis*hoch(basis, exponent+1))))
    

    应该是

     }else if(exponent < 0){
            return (1/hoch(basis, -exponent));
    
  3. # 3 楼答案

    你的括号用错了。您希望乘以递归调用的结果,而不是除以它;你希望你乘以的东西是1/basis(去掉一个负指数)

  4. # 4 楼答案

    用hoch(2,-2)你可以计算

         1 / (-2 * (1 / (-1 * (1 / 1)))
    <=>  1 / (-2 * (1 / (-1))
    <=>  1 / (-2 * -1)
    <=>  1/2
    
  5. # 5 楼答案

    public static double hoch(double basis, int exponent){
        if(exponent > 0){
            return basis*hoch(basis, exponent-1);
        }else if(exponent < 0){
            return hoch(basis, exponent+1)/basis;
        }else{
            return 1;
        }
    }
    

    虽然更有效的(递归)解决方案是

    public static double hoch(double basis, int exponent){
        if(exponent == 0)
            return 1;
        else{
            double r = hoch(basis, exponent/2);
            if(exponent % 2 < 0)
                return r * r / basis;
            else if(exponent % 2 > 0)
                return r * r * basis;
            else
                return r * r;
        }
    }