繁体   English   中英

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

[英]Calculate the power of any exponent (negative or positive)

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

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。 任何想法可能有什么问题吗?

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

应该

 }else if(exponent < 0){
        return (1/hoch(basis, -exponent));
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;
    }
}

您的括号是错误的方法。 您希望乘以递归调用的结果,而不是除以它。 并且您希望乘以的东西是1/basis (“剥离”一个负指数)。

使用hoch(2,-2)实际计算

     1 / (-2 * (1 / (-1 * (1 / 1)))
<=>  1 / (-2 * (1 / (-1))
<=>  1 / (-2 * -1)
<=>  1/2

将BASE提升为pos或neg BASE的工作代码:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM