2017-02-27 8 views
0

Ich versuche, ein Dreieck bestehend aus Sternchen mit zwei Methoden zu drucken, eine nach oben und eine nach unten zu drucken. Drucken es ist einfach und ich verwende den CodeDrucken Sternchen Dreieck mit Rekursion

public static String printTriangleUp(int n) 
{ 
    if(n <= 0) return ""; 

    String p = printTriangleUp(n - 1); 
    p = p + "*"; 
    System.out.println(p); 

    return p; 
} 

Und die Ausgabe erhalten, die wie

* 
** 
*** 
**** 
***** 

Allerdings kann ich nicht einen Weg finden, um es wie

***** 
**** 
*** 
** 
* 

Antwort

0

aussehen Die Logik für Ihre Funktion sollte sein:

printTriangleUp (n) druckt ein Dreieck, mit Reihen von Sternen in Längen n bis 1

So Ihren rekursiven Aufruf, printTriangleUp(n-1) würde:

Druck ein Dreieck, mit Reihen von Sternen in Längen n-1 bis 1

Das bedeutet, das fehlende Stück wäre die oberste Reihe von n Sternen, die vor dem rekursiven Aufruf erfolgen müsste.

1

Der einfachste Weg ist, einen String zu deklarieren, bevor Sie die Methode aufrufen, damit Sie sich vollständig auf den Stack verlassen können, um die Zeichenfolge zu erhöhen und die Werte in der richtigen Reihenfolge abzusetzen.

public static void main(String [] args){ 
    String p = ""; 
    printTriangleDown(5, p); 
} 

public static String printTriangleDown(int n, String p){ 
if(n <= 0) return ""; 

p = p + "*"; 
printTriangleDown(n-1, p); 
System.out.println(p); 

return p; 

}

0

imho ursprünglichen Code ist seltsam, dass das Verfahren auf der gleichen Zeit ist etwas gedruckt wird, und einen String zurück.

Ihr zwei Problem wird einfach sein, wenn Sie die Funktion klar (all Pseudo-Code natürlich) machen:

printTriangleUp(i) 
    if i == 0 : 
    do nothing 
    else : 
    printTriangUp(i-1) 
    print i stars 

In ähnlicher Weise für ein Abwärts Dreieck:

printTriangleDown(i) 
    if i == 0 : 
    do nothing 
    else : 
    print i stars 
    printTriangDown(i-1) 
Verwandte Themen