2017-03-28 9 views
1

Ich versuche, ein Java-Programm zu schreiben, das Rekursion verwendet, um die Power-Tower-Funktion zu berechnen. Ihre Funktion nimmt als Eingabe drei Werte an: Basis, Stärke und Höhe. Es sollte dann etwas wie ((2^2)^2)^2) berechnen. Ich bekomme nicht die richtige Berechnung, bitte sagen Sie mir, was los ist.Java Rekursion Advance

Das ist, was ich habe:

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

Was ist Höhe? Ist es die Anzahl der Male, die auf 2 erhöht werden? Was wird die Höhe in dem Beispiel sein, das Sie angegeben haben? –

+0

Haben Sie die Klammern richtig herum? Ich dachte, es wäre 2^(2^(2^2)) für einen Power Tower gewesen? – muzzlator

+0

ja muzzlator powertower –

Antwort

0

Nach Mathe Funktionsdefinition, Sie brauchen keine Höhe. Überprüfen Sie einfach die korrekte Rekursion:

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

Vergessen Sie nicht, dass wenn Sie Power = 5, bedeutet es, dass 2 an die Macht von 65536. Es ist wirklich große Zahl. – eg04lt3r

+0

Ich brauche eine Höhe –

+0

Wirklich? Wofür? – eg04lt3r

-1

überprüfen Sie dies. es wird funktionieren

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

Ist es Rekursion? – eg04lt3r

0

Ihre Beschreibung der "Power Tower" -Funktion ist nicht ganz klar. Hier erwarte ich, dass height kann nie kleiner als 1 ist und dass

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

heißt power wird height mal wiederholt. Ich denke, in diesem Fall die einfachste Lösung besteht darin, zunächst nur für power einen Helfer funciton vorstellen und es dann 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. calcualte verwenden eigentlich, wenn mein Verständnis der Definition von Macht-Turm korrekt ist als

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

, die auf einfachere Art und Weise umgesetzt werden kann, aber ich erwarte, dass eine solche Umsetzung ist nicht das, was von Ihnen erwartet wird.