Rekursion

Blurio
Beiträge: 56
Registriert: Do 20. Nov 2008, 21:39

Rekursion

Beitrag von Blurio »

Ahoyhoy,
wie genau (und mit genau mein ich ungefähr, klingt blos andersrum scheisse) mach ich denn die Rekursion in Abschlussaufgabe 1?
Mir is halbwegs klar, was ne Rekursion an sich macht, also sich selbst mit andern Parametern aufrufen, ich würds wohl auch hinkriegen mit drölf schleifen die Liste solange zu halbieren bis nurnoch zwei bzw drei Punkte drin liegen, so in der Art if(punkteanzahl > 3){ listehalbieren }, aber wie krieg ich dann die Punkte im Rest der Liste? Da is mir noch Recht bange.

Danke im Vorraus,
Blue.
Thomas
Administrator
Beiträge: 383
Registriert: Do 23. Okt 2008, 20:16
Wohnort: Karlsruhe
Kontaktdaten:

Re: Rekursion

Beitrag von Thomas »

naja ich kann dir ma ungefähr sagen wie ichs gemacht hab...
als erstes ne fallunterscheidung wieviele punkte noch im feld sind. wenn mehr als 3 punkte drin sind halbierst du das feld indem du mit sublist 2 neue felder erstellst. mit diesen teilfeldern rufst du erneut die methode auf und speicherst den rückgaewert in 2 shortestdistance variablen. bei diesen 2 variablen hab ich dann abstand usw verglichen und den kürzesten gespeichert und dann die punkte im gebiet der trennlinie in 2 listen gespeichert hier die abstände berechnet und die dann jeweils mit dem bisher kürzesten abstand verglichen. wenn das feld aus 3 oder weniger punkten besteht den abstand berechnen. so grob hab ich das gemacht. keine ahnung ob das iwie ideal is usw da ich selbst erst mit programmieren angefangen hab aba zumindest läuft das programm mal und besteht alle teställe von praktomat und alles was ich bis jetzt so eingegeben hab^^.
ryo
Beiträge: 143
Registriert: So 16. Nov 2008, 18:51

Re: Rekursion

Beitrag von ryo »

hab ich auch in etwa so.

Blurio, guck doch am besten mal in die newsgroup. Da wurde die Rekursion schon so weit durchgekaut, dass die meisten Fehler schon von vornerein vermieden werden, wenn du dir dass erst mal durchliest.
Dort wird auch grob auf die zwei möglichen implementierungen eingegangen. entweder erzeugt mann immer neue field objekte (oop- variante) oder man benutzt nur ne rekursive Methode ("performance- fraktion" *g*) wobei man bei letzterem en bissl aufpassen soll, wenn ichs recht in erinnerung habe.
Blurio
Beiträge: 56
Registriert: Do 20. Nov 2008, 21:39

Re: Rekursion

Beitrag von Blurio »

Ok, danke, ich hätte noch ne generelle Frage.
Man soll ja drei Klassen implementieren, Field, shortestDistance und Shell. Allerdings hat meine Field Klasse als Attribut ne Liste, und sonst im Prinzip nur nen Konstruktor, die andern Methoden davon sind eigentlich nur die gleichen Methoden die LinkedList auch hat, damit ich sie von andern Klassen aus aufrufen kann.
Is das jetzt total bescheuert von mir gedacht oder so gewollt?

Achja und nochwas, ich hab gelesne man soll Point neu implementieren, darf aber ähnlich der von Pepper sein. Kann ich nich einfach alle rotate und shift und blah Methoden aus der Pepperschen Point Klasse löschen oder wollen die wirklich, dass ich den shit komplett neu schreib? Ach, und aus double was anderes machen.

Sorry, wenn ich jetzt Unsinn frag, der in der Newsgroup evtl schon drölfzig mal durchgekaut wurde, aber die kann ihc von hier aus nich erreichen.
Benutzeravatar
DaVinci
Beiträge: 62
Registriert: Mi 5. Nov 2008, 01:20

Re: Rekursion

Beitrag von DaVinci »

Blurio hat geschrieben:Ok, danke, ich hätte noch ne generelle Frage.
Man soll ja drei Klassen implementieren, Field, shortestDistance und Shell. Allerdings hat meine Field Klasse als Attribut ne Liste, und sonst im Prinzip nur nen Konstruktor, die andern Methoden davon sind eigentlich nur die gleichen Methoden die LinkedList auch hat, damit ich sie von andern Klassen aus aufrufen kann.
Is das jetzt total bescheuert von mir gedacht oder so gewollt?
Die Methoden zum Listen-Handling kannst du doch einfach von der Liste selbst übernehmen lassen. Meine Field-Klasse hat keinerlei eigene Listen-Funktionen.
Blurio hat geschrieben: Achja und nochwas, ich hab gelesne man soll Point neu implementieren, darf aber ähnlich der von Pepper sein. Kann ich nich einfach alle rotate und shift und blah Methoden aus der Pepperschen Point Klasse löschen oder wollen die wirklich, dass ich den shit komplett neu schreib? Ach, und aus double was anderes machen.
Für die Point-Klasse brauchst du in etwa folgende Methoden:
Constructor, Getter (und eventuell Setter) für x und y, sowie folgende weitere Funktionen:
public int compareTo(Point p) {...}
public boolean equals(Point p) {...}
public double distanceTo(Point p) {...}
Blurio hat geschrieben: Sorry, wenn ich jetzt Unsinn frag, der in der Newsgroup evtl schon drölfzig mal durchgekaut wurde, aber die kann ihc von hier aus nich erreichen.
Ditto, and I blame my news reader :D
¿ɯıɥ ssɐɹɹɐqɯǝ ʎɥʍ 'ʇou s,ʇı ɟı — noʎ llǝʇ ll,ǝɥ 'ɔɐɯ ɐ s,ʇı ɟı — sǝsn ǝɥ so ʇɐɥʍ uɐɯ ɐ ʞsɐ ɹǝʌǝu
Blurio
Beiträge: 56
Registriert: Do 20. Nov 2008, 21:39

Re: Rekursion

Beitrag von Blurio »

DaVinci hat geschrieben:
Blurio hat geschrieben:Ok, danke, ich hätte noch ne generelle Frage.
Man soll ja drei Klassen implementieren, Field, shortestDistance und Shell. Allerdings hat meine Field Klasse als Attribut ne Liste, und sonst im Prinzip nur nen Konstruktor, die andern Methoden davon sind eigentlich nur die gleichen Methoden die LinkedList auch hat, damit ich sie von andern Klassen aus aufrufen kann.
Is das jetzt total bescheuert von mir gedacht oder so gewollt?
Die Methoden zum Listen-Handling kannst du doch einfach von der Liste selbst übernehmen lassen. Meine Field-Klasse hat keinerlei eigene Listen-Funktionen.

Huh? Ich hab ungefähr drölf Methoden die alle in etwa so aussehen:
public void removeLast(){
list.removeLast();

Damit ich dann in der Shell und der distance Klasse Punkte zu Feld Objekten hinzufügen kann. Wenn nich so dann bitte mal n Beispiel wie sonst.
Und jo, Point sieht bei mir auch so aus, eben die Zwei Methoden zu meiner fürs letzte Übungsblatt verunstalteten Point-Klasse hinzugefügt, den Rest gelöscht.
Benutzeravatar
salami
Beiträge: 179
Registriert: Mi 5. Nov 2008, 22:41
Wohnort: Karlsruhe

Re: Rekursion

Beitrag von salami »

Blurio hat geschrieben:Huh? Ich hab ungefähr drölf Methoden die alle in etwa so aussehen:
public void removeLast(){
list.removeLast();
Damit ich dann in der Shell und der distance Klasse Punkte zu Feld Objekten hinzufügen kann.
Wieso musst du etwas aus der Liste löschen um etwas neues hinzuzufügen? :think:
Blurio
Beiträge: 56
Registriert: Do 20. Nov 2008, 21:39

Re: Rekursion

Beitrag von Blurio »

Das is die lösch Methode, die hab ich um zu gucken ob zwei Punkte gleich sind. Geht im Prinzip so: Add Point, Field durchgucken ob einer von den Punkten derselbe is wie der letzte in der Liste, wenn ja letzten Punkt wieder löschen.

Hinzufügen wäre
public void add(Point p){
list.add(p);}
Benutzeravatar
salami
Beiträge: 179
Registriert: Mi 5. Nov 2008, 22:41
Wohnort: Karlsruhe

Re: Rekursion

Beitrag von salami »

Dafür brauchst du den Punkt aber gar nicht erst in die Liste einfügen. :D
Geh einfach alle Punkte in der Liste durch und schau ob der aktuelle Punkt mit dem übergebenen übereinstimmt.

Also etwa so:

Code: Alles auswählen

public boolean istDerPunktSchonInDerPunkteListe(Point punkt) {
   for ( alle punkte in der liste durchgehen) {
      wenn(der aktuelle punkt hat die gleichen koordinaten wie der übergebene punkt) {
          return wahr;
      }
   }
   return falsch;
}
Das in der If-Abfrage ("der aktuellepunkt hat ..") kannst du auch über eine equals-Funktion machen.
ryo
Beiträge: 143
Registriert: So 16. Nov 2008, 18:51

Re: Rekursion

Beitrag von ryo »

umständlich ohne ende *g* mach das anders, das gibt ganz sicher keine tolle stilnote

also, deine list heiße jetzt einfach mal points

dann kannst du einfach mit points.contains(zuUntersuchenderPunkt) fragen, ob der Punkt schon existiert und fertig (true, falls punkt in liste). mehr ist da nicht dabei.
Antworten

Zurück zu „Allgemein“