Hallo liebe Community.
Habe vor kurzem begonnen, Java zu programmieren und mir ein Beispiel vorgenommen, welches ich nun nicht lösen kann
Bin mir nicht sicher ob es dafür überhaupt eine rekursive Lösung gibt.
Ich möchte eine Zahlenpyramide rekursiv ausgeben. Also so in der Art:
1
12
123
1234
123
12
1
Bis zu 1234 ist das ganze ja kein Problem, aber mit der selben Methode auch wieder runterzuschreiben bekomme ich nicht hin.
Eine Lösung mit 2 Funktionen würde mir schon einfallen, aber das muss doch auch mit einer einzigen Funktioneren...:bahnhof:
Hier meine Methode bis 1234...
[Java]
public class Aufgabe3 {
private static void printSequenz(int n) {
if(n > 0){
printSequenz(n - 1);
for (int i = 1; i <= n; i++) {
System.out.print(i);
}
System.out.println();
}
}
public static void main(String[] args) {
printSequenz(5);
}
}
[/code]
Wäre toll, wenn ihr mir einen kleinen Denkanstoss verpassen könntet.
Ansonsten würde ich sagen, du brauchst 2 Parameter. Das macht das ganze überschaubar.
Ich hab mir eben mal ne kleine Helfer Methode gebaut, damit man nicht die For-Schleife braucht um die Zahelnfolge zu erzeugen:
Java:
privatestaticvoidcreateAndPrintSequence(int max){for(int i =1; i <= max; i++)System.out.print(i);System.out.println();}
Muss man nicht machen, ist aber natürlich schöner.
Mit einem 2ten Parameter (max) kannst du dann einfach vor und nach der Rekursion eine Ausgabe machen, so dass die Zahlen in beide Richtungen ausgegeben werden. Du musst dann natürlich noch etwas tricksen, da du sonst
das bekommst. Dazu musst du nur die Zaheln invertieren: 4 => 1, 3 => 2 etc. so dass du createAndPrintSequence() mit dem passenden Wert aufrufst. Ebenso darf dann nur einmal 1234 ausgegeben werden, wenn max == n ist.
Hallo!
Wow, danke für die vielen Antworten.
Habs gestern auch schon mit 2 Funktionen gelöst, wie gesagt, habe nur überlegt ob es auch mit einer einzigen möglich ist. Denke aber eher nicht.
Hier meine Version
Java:
publicclassAufgabe3{privatestaticvoidprintSequenz(int n){doSequenz(1,n);//doSequenz(-(n-1));}privatestaticvoiddoSequenz(int c,int n){printLine(c);//Raufschreibenif(c < n){doSequenz(c+1, n);printLine(c);//Runterschreiben, kommt erst nach dem jeweiligen höheren doSequenz}}privatestaticvoidprintLine(int n){for(int i =1; i <= n; i++)System.out.print(i);System.out.println();}publicstaticvoidmain(String[] args){printSequenz(5);}}
Oben noch ein auskommentiertes -(n-1), habs zuerst mit positiven und negativen Zahlen gemacht, ist aber irgendwie unschön