Java Recursion Advance

时间:2017-03-28 04:47:13

标签: java math recursion

我正在尝试编写一个使用递归来计算功率塔功能的java程序。您的函数将输入三个值:base,power和height。然后它应该计算像(((2 ^ 2)^ 2)^ 2)。 我没有得到正确的计算,请告诉我出了什么问题。

这就是我所拥有的:

public double powerTower(double base, int power, int height){     

    if (base == 0) {
        return 0;
    } else if (power == 1) {
        return base;
    } else if(height == 1){
        return base * powerTower(base, power - 1, height - 1);
    }else if(power == 0){
        return 1;
    }else {
        return base * powerTower(base, power -1, height-1) * Math.pow(base, height*power);
        //return Math.pow(base, power*height)*base;
    }
}

3 个答案:

答案 0 :(得分:0)

根据数学函数定义,您不需要任何高度。 只需检查正确的递归:

private static int powerTower(int base, int power) {
    if (power == 1) {
        return base;
    } else {
        return (int) Math.pow(base, powerTower(base, power - 1));
    }
}

答案 1 :(得分:0)

您对“电力塔”功能的描述不太清楚。在这里,我希望height永远不会小于1而且

powerTower(2,3,4) = ((((2^3)^3)^3)^3)

即。 power被复制height次。我认为在这种情况下,最简单的解决方案是首先为power引入辅助功能,然后使用它来计算powerTower

static double power(double base, int power)
{
    if ((base == 0) || (base == 1))
    {
        return base;
    }
    else if (power == 0)
    {
        return 1.0;
    }
    else if (power == 1)
    {
        return base;
    }
    else
    {
        return base * power(base, power - 1);
    }
}

public static double powerTower(double base, int power, int height)
{
    if (height == 1)
    {
        return power(base, power);
    }
    else
    {
        double newBase = powerTower(base, power, height - 1);
        return power(newBase, power);
    }
}

P.S。实际上,如果我对电力塔的定义的理解是正确的

powerTower(base, power, height) = base^(power^height)

可以用更简单的方式实现,但我希望这样的实现不是你所希望的。

答案 2 :(得分:-1)

检查一下。它会起作用

public long powerTower(long base, long power, long height){     
        for(int i=0;i<height;i++){
            base= (long) Math.pow(base,power);
        }
        return base;
}