Java Hamster

Hallo zusammen,


in dieser Aufgabe muss der Hamster der Kornspur folgen, nachdem er an die Wand kracht, muss der Hamster mithilfe der Rekursion zurück zur Startposition und dabei alle Körner zurücklegen, wo sie mal waren.

Ich habe mehrere male probiert, aber bin trotzdem gescheitert. 👃

Hat jemand irgendwelche Tipps?
Vielen Dank!

Java:
void HinUndZurück() {
    if (vornFrei()) {
        vor();
        nimmKorn();
        HinUndZurück();
        //?
        } else {
        umdrehen();
    }
}


void istKornDa() {
    if (kornDa()) {
        nimm();
    }
}

void nimmKorn() {
    if (kornDa()) {
        nimm();
    } else {
    umdrehen();
    vor();
    umdrehen();
    sucheKorn();
    istKornDa();
    }
}



void sucheUnten() {
    if (!kornDa()) {
        umdrehen();
        if (vornFrei()) {
            vor();
            if (!kornDa()) {
                zurückGehen();
            }
        } else {
            umdrehen();
        }
    }
}


void sucheOben() {
    if (!kornDa()) {
        if (vornFrei()) {
            vor();
            if (!kornDa()) {
                zurückGehen();
                umdrehen();
            }
        }
    }
}


void sucheRechts() {
    if (!kornDa()) {
        rechtsUm();
        if (vornFrei()) {
            vor();
            if (!kornDa()) {
                zurückGehen();
                rechtsUm();
            }
        } else {
            linksUm();
        }
    }
}

void sucheLinks() {
    if (!kornDa()) {
        linksUm();
        if (vornFrei()) {
            vor();
            if (!kornDa()) {
                zurückGehen();
                linksUm();
            }
        } else {
            rechtsUm();
        }
    }
}

void umdrehen() {
    linksUm();
    linksUm();
}

void rechtsUm() {
    linksUm();
    linksUm();
    linksUm();
}

void zurückGehen() {
    umdrehen();
    vor();
}


void sucheKorn() {
    sucheOben();
    sucheRechts();
    sucheUnten();
    sucheLinks();
}

void main() {
    HinUndZurück();
}
 

Anhänge

  • asdasdasdasdasdas.PNG
    asdasdasdasdasdas.PNG
    11,4 KB · Aufrufe: 1
Der wichtige Punkt ist, dass Du Dir bei der Rekursion immer nur merken musst, was Du gemacht hast.

Also angenommen, Du hast:
  • Schritt vor
  • Rekursiver Aufruf
Wenn Du nach dem Rekursiven Aufruf weisst, dass Du vor dem Feld umgedreht stehst, dann kannst Du hier einfach nach dem Aufruf wieder einen Schritt vor gehen:

  • Schritt vor
  • rekursiver Aufruf
  • Schritt vor

Und das gilt für alles. Also auch bei sowas:
  • drehe rechts
  • rekursiver Aufruf
  • drehe links

Und das kann auch mehrere Dinge auf einmal sein, also etwas wie:
  • Nimm Korn
  • Schritt vor
  • rekursiver Aufruf
  • Schritt vor
  • Lege Korn ab

Du hast also immer das Pattern:
  • Du machst etwas
  • Rekursion
  • Das gemachte rückgängig machen.
 
Der wichtige Punkt ist, dass Du Dir bei der Rekursion immer nur merken musst, was Du gemacht hast.

Also angenommen, Du hast:
  • Schritt vor
  • Rekursiver Aufruf
Wenn Du nach dem Rekursiven Aufruf weisst, dass Du vor dem Feld umgedreht stehst, dann kannst Du hier einfach nach dem Aufruf wieder einen Schritt vor gehen:

  • Schritt vor
  • rekursiver Aufruf
  • Schritt vor

Und das gilt für alles. Also auch bei sowas:
  • drehe rechts
  • rekursiver Aufruf
  • drehe links

Und das kann auch mehrere Dinge auf einmal sein, also etwas wie:
  • Nimm Korn
  • Schritt vor
  • rekursiver Aufruf
  • Schritt vor
  • Lege Korn ab

Du hast also immer das Pattern:
  • Du machst etwas
  • Rekursion
  • Das gemachte rückgängig machen.
Danke für die schnelle Antwort.

Müsste ich dann in meinem Fall dann meine Korn-Suchfunktion so abändern, dass es dem Gegenteil entspricht?
 

Zurück
Oben