Zahlenpyramide rekursiv programmieren

Maxl1337

Neues Mitglied
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.🙂
 
[Java]
public class Aufgabe3 {

private static void printSequenz(int n, int max) {
if(n > 0){
printSequenz(n - 1,max);
if(n<=max)
{
for (int i = 1; i <= n; i++) {
System.out.print(i);
}
}
else
{
for (int i = 1; i <= ((max*2-1-n)); i++) {
System.out.print(i);
}
}
System.out.println();
}
}

public static void main(String[] args) {
printSequenz(2*4 -1,4);
}

}
[/code]

Nehm doch einfach zwei Parameter für deine rekursive Funktion.

m.f.G. Developer_X
 
Dev_X, deine Lösung gibt 123 nicht 2 mal aus.

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:
private static void createAndPrintSequence(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
1234
123
12
1
1
12
123
1234
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.
 
Ich würde es so machen:
Java:
class Main
{   
   private static void printLine(int i)
   {
      int j = 0;
      while(j < i)
      {
         System.out.print(++j);
      }
      System.out.println();
   }
   private static void line(int i, int n)
   {
      printLine(i);
      if(i < n) // Laufbedingung
      {
         line(i + 1, n);
         printLine(i);
      }
   }
   public static void main(String[] args) 
   {   
      line(1, 4);
   }
}
 
Erstens: Bitte keine Lösungen posten, zumindest nicht im Anfänger Bereich
Zweitens: kriegst du 1234 zwei mal ausgegeben
 
So hier mal nur mit Rekursionen gelöst. Unberschreiblich wie beliebt das Thema zurzeit ist:

Java:
public class NumberPyramid {
  
  public static void main(String... args) {
    printPyramid(4);
  }
  
  public static void printPyramid(int n) {
    printPyramid(1, n);
  }
  
  private static void printPyramid(int i, int n) {
    if (i < n) {
      printLine(i);
      System.out.println();
      printPyramid(i + 1, n);
      printLine(i);
      System.out.println();
    } else {
      printLine(i);
      System.out.println();
    }
  }
  
  private static void printLine(int n) {
    if (n > 0) {
      printLine(n - 1);
      System.out.print(n);
    }
  }
}
 
Zuletzt bearbeitet:
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:
public class Aufgabe3 {

	private static void printSequenz(int n) {
		doSequenz(1,n);
		//doSequenz(-(n-1));
	}

	private static void doSequenz(int c, int n) {
		printLine(c); //Raufschreiben
		if(c < n)
		{
			doSequenz(c+1, n);
			printLine(c); //Runterschreiben, kommt erst nach dem jeweiligen höheren doSequenz
		}
	}

	private static void printLine(int n) {
			for (int i = 1; i <= n; i++)
				System.out.print(i);
			System.out.println();
	}

	public static void main(String[] args) {
		printSequenz(5);
	}

}
Oben noch ein auskommentiertes -(n-1), habs zuerst mit positiven und negativen Zahlen gemacht, ist aber irgendwie unschön 🙂
 

Zurück
Oben