2016-11-26 3 views
0

ich es geschafft, eine Pyramide mit Schleifen wie diese drucken:Drucken Pyramide mit Rekursion nur

void printtree() { 
    for (int i=0; i<row; i++){ 
    for (int j=0; j<row-i-1; j++) 
     System.out.print(" "); 
    for (int k=row; k>row-i-1; k--) 
     System.out.print("* "); 
    System.out.println(); 
    } 
} 

Die Ausgabe sieht wie folgt aus:

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

Ich mag würde dies mit Rekursion nur machen, wie Soll ich die Funktion konstruieren? Meine Sorge ist mit der verschachtelten Schleife, ich konnte nur die einzelne innere oder äußere Schleife interpretieren. Ich weiß, dass es mit (row-1) Leerzeichen, gefolgt von Zeile # von "*" in jeder Zeile und dann in eine neue Zeile umgewandelt wird. Was ist der Grundfall hier?

+0

Stellen Sie sich vor: Um die letzten N Sterne mit einem Versatz von K Räumen zu drucken, sollten Sie zunächst N-1 Stern drucken mit einem Offset von K + 1 Leerzeichen. –

+1

Haben Sie Rekursion untersucht? Wenn ja, haben Sie das schon selbst versucht? Natürlich wird es Ihnen schwer fallen, wenn Sie nicht recherchieren. Wenn Sie versucht haben, aber Ihre Implementierung nicht zum Laufen bringen können, geben Sie Ihren Versuch –

Antwort

3

Da wollten Sie nur Rekursion Lösung verwenden. Ich nehme an, Sie wollen keine Schleifen im Programm haben. Wenn Sie Ihr Programm schnell in einen rekursiven Ansatz umwandeln möchten, sehen Sie sich jede for-Schleife an und überlegen Sie, wie Sie sie konvertieren können.

können Sie

konvertieren
for (int j=0; j<row-i-1; j++) 
     System.out.print(" "); 

static void printSpace(int j, int i) { 
     if (j < row - i - 1) { 
      System.out.print(" "); 
      printSpace(j + 1, i); 
     } 
    } 

Hinweis-Funktion, die über rekursive Funktion als for-Schleife funktioniert gleich. Es benötigt dieselben Parameter, die Sie in Ihrer for-Schleife verwendet haben. Jetzt können Sie diesen Trick auf for-Schleife anwenden, die auch Sterne druckt.

static void printStar(int k, int i) { 
     if (k > row - i - 1) { 
      System.out.print("* "); 
      printStar(k - 1, i); 
     } 
    } 

Der ähnliche Trick kann auf äußere for-Schleife angewendet werden und Sie können den Code transformieren.

kompletter Code

static int row = 5; 

    static void printtree() { 
     printPyramid(0); 
    } 

    static void printPyramid(int i) { 
     printSpace(0, i); 
     printStar(row, i); 
     System.out.println(); 

     if (++i < row) 
      printPyramid(i); 
    } 

    static void printSpace(int j, int i) { 
     if (j < row - i - 1) { 
      System.out.print(" "); 
      printSpace(j + 1, i); 
     } 
    } 

    static void printStar(int k, int i) { 
     if (k > row - i - 1) { 
      System.out.print("* "); 
      printStar(k - 1, i); 
     } 
    } 
-1
static void recursion(int row, int k, int j) 
{ 
if(row>10) 
{ 
    return; 
} 
else 
{ 
    if(k==row) 
    { 
    System.out.println(); 
    recursion(++row, 0,0); 
    } 
    else if(10-j>row) 
    { 
    System.out.print(" "); 
    ++j; 
    recursion(row, k, j); 
    } 
    else 
    { 

    System.out.print("* "); 
    recursion(row, ++k, j); 
    } 
} 
} 

Call-Methode

recursion(0,0,0); 
+0

Downvote ein, da es hier keine Erklärung gibt; es ist nur ein Code-Dump. – Carcigenicate