2016-04-14 10 views
-3

Ich brauche Hilfe, um eine Übung zu lösen. In dieser Methode muss ich die Anzahl der Sterne ("*"), die gleich 2 der Potenz von x sind, ausdrucken.Drucken "*" mit Rekursion

Zum Beispiel, wenn ich 2 der Macht von 2 habe, sollte es 4 Sternchen ("****") drucken;

Ich habe eine Methode, die mir die richtige Zahl zurückgibt, aber ich habe Probleme mit dieser Nummer zum Drucken dieser Sternchen.

Hier ist mein Code:

public static int writeStars(int number) { 
    if (number == 0) { 
     return 1; 
    } else { 
     int number2 = 2 * writeStars(number - 1); 
     System.out.println(" number " + number2); 
     return number2; 
    } 
} 
+4

„aber ich habe Probleme dieser Nummer zum Drucken dieser Sternchen. " - Welche Probleme könnten diese sein? Sie haben keinen Ihrer Asterisk-Druckcodes angegeben. – azurefrog

Antwort

2

Hier ist eine Idee für das Problem zu lösen, ohne dass die Lösung in Code verlost.

Ihre Gedanken sind auf dem richtigen Weg zu merken, dass 2 x = 2 * 2 x-1. Zum Drucken 2 x* Zeichen, können Sie 2 x-1zweimal drucken. Erstellen Sie in Ihrer rekursiven Methode ein Basiszeichen * Zeichen, und führen Sie Ihren rekursiven Fall den rekursiven Aufruf zweimal, den passenderweise angepassten Wert übergeben.

+0

Vielen Dank, Problem gelöst (: – Kasparas

0

Weil es eine Rückkehr Methode in Ihrem Client ist, sollten Sie

int num = writeStars(someNum); 

Dann drucken müssen Sie brauchen nur eine einfache for-Schleife

for(int i=0; i < num; i++) 
    System.out.print("*"); 
1

Eine Möglichkeit, es zu tun ist, eine zu schaffen Folge von 2^(i-1) Sternen bei der i-ten Iteration. Für 4 Iterationen (x = 4) haben Sie 8,4,2,1 Sterne für jede Iteration. Sie können die Zeichenfolge von Sternen für jede Iteration zurückgeben und verketten, um die letzte Zeichenfolge zu erhalten.

Die Abbruchbedingung sein wird, wenn die Eingangsgröße 0. Dieser Code könnte helfen:

public static String writeStars(int y) { 
    //y is 2^x 
    if(y == 0) 
     return ""; 
    int num_stars = y - y/2; 
    StringBuffer stars_Buffer = new StringBuffer(num_stars); 
    for (int i = 0; i < num_stars; i++){ 
     stars_Buffer.append(""); 
    } 
    return stars_Buffer.toString() + writeStars(y/2); 
} 

Anruf writeStars mit Eingang 2^x:

writeStars(Math.pow(2, x)); 
+1

Haben Sie versucht, dies zu kompilieren? Sie geben eine 'String' hier 'return" "' zurück, wenn der Methodentyp' int 'ist. Auch kein Semikolon. – robotlos

+0

Dank @robotlos, my Schlecht. – trans1st0r