Java | Rekursion?

2 Antworten

Nachdem innerhalb der Methode die Methode zurWand selber aufgerufen wird geht es ja weiter, sobald man das erste Mal in dem else-Block landet und somit die Methode nicht weiter aufgerufen wird. Nachdem man mit zurWand fertig ist, steht man nach den Umdrehungen schon in der richtigen Richtung. Also braucht man danach nur ein weiteres fahre(); welches dann je Rekursionsstufe ausgeführt wird.

Irgendwann wird zurWand zum letzten Mal aufgerufen. Und wenn man danach fahre(); platziert, wird dieses fahre genau so oft aufgerufen, wie das fahre vor zurWand();.


AlessandroO6 
Fragesteller
 30.01.2023, 21:01

Hi, so einfach ist es nicht, mein Fehler, tut mir leid.

Er soll auf das Startfeld zurück fahren. Wenn man ein weiteres zurWand(); einbaut, dann fährt dieser bis zur Wand. Er kann aber von jedem beliebigen Startpunkt im Raum starten.

0
AlessandroO6 
Fragesteller
 30.01.2023, 21:22
@Mathmaninoff, UserMod Light

Ich habe noch eine Frage.. Nach dem diese Methode x mal rekursiv aufgerufen wurde, macht diese ja normal mit dem Ablauf der Funktion weiter. Nur wieso ruft er das "fahre" dann noch x mal auf? Eigentlich müsste dieser das doch nur einmal ausführen?

0
AlessandroO6 
Fragesteller
 30.01.2023, 21:26
@Mathmaninoff, UserMod Light

So hab's jetzt komplett verstanden! Hab mir das 5/6 mal angeschaut und man kann es sich so vorstellen, wie eigenständige Instanzen der Methode, welche danach normal weiter machen und sich dann schließen.

Vielen Dank.

btw kann sein dass meine Erklärung verwirrend ist

0
AlessandroO6 
Fragesteller
 31.01.2023, 15:02
@Mathmaninoff, UserMod Light

Hallo nochmals. Wenn dieser jetzt eine Marke auf dem letzten Feld platzieren soll, wie mache ich das? Immerhin, wenn ich den in die Abbruchbedingung, oder nach der Funktion schreibe, wird diese ja so ausgeführt, dass auf jedem Feld zurück eine Marke platziert wird. platziereMarke(); ist dafür die Methode.

0
Mathmaninoff, UserMod Light  31.01.2023, 15:08
@AlessandroO6

Der else-Block wird nur bei der Drehung um 180° ausgeführt. Wenn man platziereMarke(); da platzieren würde, würde also nur das Feld vor der Wand markiert werden.

0

Hast du die komplette Aufgabe? Falls ja wäre es hilfreich die mal nachlesen zu können. Im Beispiel kann man ja eine Bedingung festlegen bei der die Rekursion irgendwann aufhört.

Ganz blöd würde ich sagen, du baust dir in die if Abfrage eine Bedingung wie im Beispiel ein, ob du auf dem Startfeld stehst. Wenn nein, fahre, wenn ja, drehe 2x links. Wie im Beispiel halt.

Woher ich das weiß:Berufserfahrung – Ich bin Entwickler.

AlessandroO6 
Fragesteller
 30.01.2023, 20:59

Das ist ja das Problem haha

Das Startfeld muss ja irgendwie ermittelt werden. Z.B. über eine Variable, welche die Anzahl des ausgeführten Fahren zähl, hätte ich jetzt gedacht

0
Zwnow  30.01.2023, 21:09
@AlessandroO6

Mit einer Variable wäre das ja recht easy, da kannst du ja einfach einen Int hoch-/runterzählen, je nach Richtung

0
AlessandroO6 
Fragesteller
 30.01.2023, 21:12
@Zwnow

jo, das ding ist, bei der Rekursiv wird dieser konstant wieder auf den initialisierten Wert zurückgesetzt, da diese sich ja rekursiv aufruft.

LG

0
Zwnow  30.01.2023, 21:14
@AlessandroO6

Darfst du Variablen außerhalb der Methoden erstellen? Da wird dann ja nichts zurückgesetzt

0