0 Daumen
1,2k Aufrufe

Frage:

Es soll ein Schachbrettmuster einmal via Iteration und einmal via Rekursion erstellt werden. Die Felder werden hierbei mit "#" für schwarz und einem Leerzeichen für weiß dargestellt. Die Seitenlänge des Bretts wird per User Eingabe vorgegeben.

Die iterative Lösung konnte ich relativ einfach mit einer geschachtelten for-Schleife lösen, allerdings weiß ich jetzt nicht genau wie ich eine geschachtelte for-Schleife in eine Rekursion konvertiere.


Code:

Iterative Lösung:

  public static void main(String[] args) {
Scanner input = new Scanner(System.in);
      // Benutzereingabe
      System.out.println("Seitenlänge eingeben:");

      int a = input.nextInt();

      for (int k = 1; k <= a; k++) { // Reihen
          for (int i = 1; i <= a; i++) { // Spalten
              if ((i + k) % 2 != 0)
                  System.out.print("#");
              else
                  System.out.print(" ");
          }
          System.out.print("\n");
      }
  }

Rekursive Lösung bisher:

public static void schach(int seitenlaenge) {
if (seitenlaenge > 0) {
if (seitenlaenge % 2 != 0) {
System.out.print("#");
} else {
System.out.print(" ");
}
schach(seitenlaenge - 1);
}
}

Damit wird nur eine Zeile ausgegeben, brauche denke ich noch eine zweite Methode welche jedesmal wenn "seitenlänge == 0" ist die Reihe wechselt und von vorne beginnt aber wie gesagt komme da gerade nicht weiter.

Avatar von

1 Antwort

0 Daumen

Code:

public static void schach(int seitenlaenge) {
printZeilen(seitenlaenge, 0);
}

private static void printZeilen(int seitenlaenge, int zaehler) {
// Abbruchbedingung
if (zaehler == seitenlaenge)
return;

// rekursiver Aufruf um die Felder einer Zeile zu printen
printFelder(seitenlaenge, zaehler);
// nächste Zeile
System.out.print("\n");

// rekursiver Aufruf für die nächste Zeile, Zähler um 1 erhöhen
printZeilen(seitenlaenge, zaehler + 1);
}

private static void printFelder(int seitenlaenge, int zaehler) {
// Abbruchbedingung
if (seitenlaenge == 0)
return;

if (zaehler % 2 != 0) {
System.out.print("#");
} else {
System.out.print(" ");
}

// rekursiver Aufruf um das nächste Feld zu printen, Seitenlänge um 1 verringen, Zähler um 1 erhöhen
printFelder(seitenlaenge - 1, zaehler + 1);
}
Avatar von

Ein anderes Problem?

Stell deine Frage

Willkommen bei der Stacklounge! Stell deine Frage einfach und kostenlos

x
Made by a lovely community