Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 计算任意指数的幂(负或正)_Java_Recursion - Fatal编程技术网

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

Java 计算任意指数的幂(负或正),java,recursion,Java,Recursion,我想计算结果,给定任何负指数或正指数以及整数类型的基数。我正在使用递归: 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, ex

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

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,但这是错误的。例如,hoch2,-2应为0.25。你知道什么地方不对吗?

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

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

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

 }else if(exponent < 0){
        return (1/hoch(basis, -exponent));
应该是

 }else if(exponent < 0){
        return (1/hoch(basis, -exponent));
虽然更有效的递归解决方案是

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;
    }
}
虽然更有效的递归解决方案是

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;
    }
}

用hoch2,-2你实际上计算

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

用hoch2,-2你实际上计算

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

将底座提升至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

将底座提升至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

指数是多少?为什么不使用exponent-1如果不增加/减少指数,那么最终会出现堆栈溢出,我的意思是为什么不使用exponent+1?“指数”是什么意思?@Andreas_D,不,事实并非如此。由于下一个递归调用将使用正指数,因此它将被递减。n**-m与1/n相同**m@ArtWorkAD,n**-m与1/n**m的-指数是多少?为什么不使用exponent-1如果不增加/减少指数,那么最终会出现堆栈溢出,我的意思是为什么不使用exponent+1?“指数”是什么意思?@Andreas_D,不,事实并非如此。由于下一个递归调用将使用正指数,因此它将被递减。n**-m与1/n相同**m@ArtWorkAD,n**-m与1/n**m相同