[Java] Java Hamster - Rekursion und Pyramidenproblem

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von Smokers, 24. Oktober 2009 .

  1. 24. Oktober 2009
    Zuletzt von einem Moderator bearbeitet: 14. April 2017
    Java Hamster - Rekursion und Pyramidenproblem

    Also ich habe folgende Aufgabe im JavaHamstermodell bekommen:

    Der Hamster steht vor einem regelmäßigen Berg unbekannter Höhe, der aus Körnern besteht. Er soll den
    Berg
    ”aushöhlen“, d.h. alle innen liegenden Körnerkacheln sollen leer gefressen werden. Sie dürfen bei
    dieser Aufgabe keine Variablen und keine Schleifen benutzen.
    Bild

    Mein Problem ist folgendes:
    Ich finde keine Aufgabenkonforme Abbruchbedingung meiner Rekursion die an der Spitze der Pyramide aufhört.

    Mein Hamster macht immer weiter =)

    Vielleicht könnt ihr mir helfen oder einen nützlichen Tip geben.

    Spoiler
    Bisheriger Code falls benötigt:
    Code:
    void drehDich() {
     linksUm();
     linksUm();
    }
    void rechtsUm(){
     linksUm();
     linksUm();
     linksUm();
    }
    boolean istSpitze(){
     return false;
    }
    void laufBisKorn() {
     if(!kornDa()){
     vor();
     laufBisKorn();
     }
     else {
     drehDich();
     vor();
     drehDich();
     }
    }
    void frissReihe(){
     if(kornDa()){
     nimm();
     vor();
     frissReihe();
     vor();
     }
     else {
     drehDich();
     vor();
     gib();
     }
    }
    void frissBerg(){
     if(!istSpitze()) {
     vor();
     vor();
     frissReihe();
     rechtsUm();
     vor();
     rechtsUm();
     frissBerg();
     }
    }
    void main() {
     laufBisKorn();
     frissBerg();
    }
    
     
  2. 24. Oktober 2009
    AW: Java Hamster - Rekursion und Pyramidenproblem

    Ich denke mal das Problem liegt in laufBisKorn()....

    ... wenn es jedes mal eine pyramide ist, dann musste dir einfach nur immer die Trefferzahl merken und WENN es 2 oder 3 Treffer gibt, weißt du, dass beim nächsten Treffer, dein dicker Hamster "am Ende" ist^^

    Das Zählen geht zwar nur über eine Variable, aber etwas besseres fällt mir gerade nicht ein sry


    Edit2: Wieso nutzt du nicht "istSpitze(){" für eine Abbruchbedingung?

    ich bitte um Rückmeldung
     
  3. 24. Oktober 2009
    AW: Java Hamster - Rekursion und Pyramidenproblem

    Also istSpitze nutze ich nicht,... weil ich sie selber geschrieben habe und sie bisher immer false liefert, .. ich weis nicht mit was ich sie befüllen soll =)

    es IST immer eine pyramide und mit dem einen Korn was er wieder ablegt, oder in der vorletzten reihe wo er nur ein Korn aufnimmt etc, is mir alles schon in sinn gekommen.

    jedoch darf ich KEINE variablen nutzen, und keine schleifen =)
     
  4. 24. Oktober 2009
    AW: Java Hamster - Rekursion und Pyramidenproblem

    Ach, ist doch ey xD...

    ...wenn es eine Pyramide ist, dann

    versuch doch einfach über die bewegung einen RECHTS, HOCH, RECHTS -> Treffer? -> Ja, dann wieder HOCH, RECHTS usw. bis Abfrage Treffer? = Nein, dann schräg Rechts RUNTER usw. also Pyramide von innen auffressen....dazu brauchste nur die Bewegung + Trefferabfrage

    klingt nicht wirklich elegant ...bitte poste, falls du Lösung hast, die hier mal rein, das interessiert mich
     
  5. 24. Oktober 2009
    AW: Java Hamster - Rekursion und Pyramidenproblem

    naja heut bin ich erstmal zu müden, morgen früh nehm ich mich der sache nochmal an,... die anderen belege hab ich ich ja schon gelöst selbst wenn ich den nicht hinbekomme werd ich weiterhin zugelassen ;-)
     
  6. 24. Oktober 2009
    AW: Java Hamster - Rekursion und Pyramidenproblem

    Nimm nen anderen Weg:

    • friss zuerst alle Koerner am Boden.
    • damit du das letzte nicht auch noch frisst, musst du halt "2 nach vorne schaun".
    • -> Somit hast du nun die Höhe der Pyramide (!)
    • Jetz brauchst du nur noch ne Funktion, die mit Hilfe der BREITE (der aktuellen EBENE) die Dinger auffrisst
    • Da du weißt, wie hoch die Pyramide ist, und dir die aktuelle EBENE bekannt ist, kannst du auch korrekt aufhören.

    Hilfts?

    Durch die Aussage "keine Variablen" sind Parameter nicht ausgeschlossen! Funktionen ohne Parameter sind für'n *****. Demzufolge würde ich da schon Parameter verwenden.


    - - -
    Tanya
     
  7. 24. Oktober 2009
    AW: Java Hamster - Rekursion und Pyramidenproblem

    Also erstmal Danke für den Gedankengang,....
    das mit der Höhe und der Breite der Pyramide ist nen guter Denkanstoß.
    Aber das mit der Parameterübergabe ist glaube ich dennoch nicht gestattet,.. selbst wenn wofür sollte ich sie verwenden?

    Schleifen sind ebensowenig erlaubt wie Variablen, zumal wir in der Vorlesung noch keine Parameterfunktionen hatten und sie bei der Lösung der Aufgaben auch nicht verwerden dürfen.

    Alles ein wenig verflixt ^^°

    es gibt im übrigen auch keine funktion "schaue2nachvorn" die ich ja bei jedem schritt ausführen müsste....
    dementsprechend müsste ich jede kachel , 2 nach vorn, und wenn da kein korn liegt wieder zurück und das korn der nächsten kachel essen,... auch etwas suboptimal oder?
    Da ist mir die variante mit dem wieder hinlegen lieber ^^°
     
  8. 24. Oktober 2009
    AW: Java Hamster - Rekursion und Pyramidenproblem

    Allgemein ist es einwenig suboptimal ohne variablen oder Parameter zu arbeiten...meiner Meinung nach^^

    Ach sag deinem Prof einfach, raidrush hat gesagt, es ist sinnlos und gut is :-D
     
  9. 3. November 2009
    AW: Java Hamster - Rekursion und Pyramidenproblem

    Und dann sagt dein Prof, dass die Jungs im RaidRush nix drauf haben und lieber die Finger vom Programmieren lassen sollen.



    Der Trick an der Aufgabe ist die Tatsache, dass die Pyramide symmetrisch ist. Das Heisst du baust die Rekursion in der unteren Reihe auf, bis du zum Ende der Pyramide kommst.
    Das war der Hinweg!

    Und beim Abbau der Rekursion legst du den Weg nach oben schrittweise zurück und läufst die Linien komplett ab (Die vorher gelaufene Strecke - 2).

    Deswegen brauchst du auch keine Zählervariablen oder sonstwas.

    Und jetzt noch ein geiler Spruch von meinem Tutor damals: Rekursion hat man verstanden, wenn man Rekursion verstanden hat :-D (denk drüber nach....)

    Sag Bescheid, wenn die Aufgabe mit der Berechnung mit der Fakultaet dran kommt. Ist genau das gleiche Prinzip ;-)
     
  10. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.