我正在尝试编写一个使用递归来计算功率塔功能的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;
}
}
答案 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;
}