AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Freigeben einer Pointerstruktur

Ein Thema von Hybrid666 · begonnen am 15. Jun 2009 · letzter Beitrag vom 17. Jun 2009
Antwort Antwort
Seite 2 von 2     12   
Reinhard Kern

Registriert seit: 22. Okt 2006
772 Beiträge
 
#11

Re: Freigeben einer Pointerstruktur

  Alt 16. Jun 2009, 16:44
Zitat von Hybrid666:
das heißt, die rekursion ist so aufgebaut, das vor dem zerstören des aktuellen elements, erst das nächste zerstört wird, also muss ich nix mit temp elementen speichern oder ähnliches, es ist gewährt das das freigeben hinten anfängt, nicht vorne.

MfG
Hallo,

Rekursion ist sehr beliebt bei Lehrern, ist elegant zu formulieren und man kann mit seinen Kenntnissen angeben, aber in der Praxis ist Rekursion fast immer Mist: wenn du 5000 Objekte hast, hast du 5000 ineinander verschachtelte Prozeduren. Das ist nicht nur völlig überflüssig, sondern auch nicht besonders gut zu debuggen.

Gruss Reinhard
  Mit Zitat antworten Zitat
Hybrid666

Registriert seit: 15. Jul 2006
Ort: Erster Stock
250 Beiträge
 
Delphi 7 Personal
 
#12

Re: Freigeben einer Pointerstruktur

  Alt 17. Jun 2009, 09:02
Zitat von Reinhard Kern:
Zitat von Hybrid666:
das heißt, die rekursion ist so aufgebaut, das vor dem zerstören des aktuellen elements, erst das nächste zerstört wird, also muss ich nix mit temp elementen speichern oder ähnliches, es ist gewährt das das freigeben hinten anfängt, nicht vorne.

MfG
Hallo,

Rekursion ist sehr beliebt bei Lehrern, ist elegant zu formulieren und man kann mit seinen Kenntnissen angeben, aber in der Praxis ist Rekursion fast immer Mist: wenn du 5000 Objekte hast, hast du 5000 ineinander verschachtelte Prozeduren. Das ist nicht nur völlig überflüssig, sondern auch nicht besonders gut zu debuggen.

Gruss Reinhard
Muss ganz ehrlich sagen, ich teil deine meinung nicht. "und man kann mit seinen Kenntnissen angeben" -> ich denk jeder Programmierer sollte was von Rekursion wissen, das hat nichts mit angeben zu tun.

Rekursion kann extrem Praktisch sein, auch bei 5000 ineinander verschachtelten elementen. Wenn man seine verschachtelung versteht, dann geht das auch mit der Rekursion.

Und um rekursion zu verstehen muss man eben rekursion verstanden haben (hab auch anfangst gedacht WTF, aber ist so, irgendwann hats klick gemacht und ich konnt super mit rekursion umgehen).

Ein kleines Beispiel:
Versuch mal iterativ Pre-, In- oder Postorder durchläufe durch einen Binärbaum. Also da find ich die Rekursion deutlich einfacher zu debuggen als iterationen mit einer queue (wüsse jetzt nicht wie das anders geht).

Oder wenn ich eine Ordnerstruktur durchlaufen will um z.B. dateien zu suchen, ich denk nichtmal das die Windowssuche das iterativ macht.

Also wie gesagt, in vielen Bereichen ist Rekursion der Iteration deutlich vorzuziehen. (mach z.B. mal obige Freigabeprozeduren iterativ, dann schauen wir mal was übersichtlicher ist).

Aber jetzt hab ich genug "mit meinen Kenntnissen angegeben".

MfG
  Mit Zitat antworten Zitat
Reinhard Kern

Registriert seit: 22. Okt 2006
772 Beiträge
 
#13

Re: Freigeben einer Pointerstruktur

  Alt 17. Jun 2009, 15:48
Zitat von Hybrid666:
Also wie gesagt, in vielen Bereichen ist Rekursion der Iteration deutlich vorzuziehen. (mach z.B. mal obige Freigabeprozeduren iterativ, dann schauen wir mal was übersichtlicher ist).

Aber jetzt hab ich genug "mit meinen Kenntnissen angegeben".

MfG
Hallo,

dabei hast du eine iterative Lösung schon selbst fast erwähnt:
"... prüfe ob .Next existiert, wenn ja, erst FreeMakro (Anchor.Next) aufrufen
dann erst Aktuelles element freigeben "

Ich würde die Liste von vorne durchlaufen und immer zuerst Next zwischenspeichern, bevor das aktuelle Element freigegeben wird.

Gruss Reinhard
  Mit Zitat antworten Zitat
Hybrid666

Registriert seit: 15. Jul 2006
Ort: Erster Stock
250 Beiträge
 
Delphi 7 Personal
 
#14

Re: Freigeben einer Pointerstruktur

  Alt 17. Jun 2009, 16:14
Zitat von Reinhard Kern:
dabei hast du eine iterative Lösung schon selbst fast erwähnt:
"... prüfe ob .Next existiert, wenn ja, erst FreeMakro (Anchor.Next) aufrufen
dann erst Aktuelles element freigeben "
Ich glaub du solltest dir erstmal klar drüber werden was rekursion ist...
Rekursion heißt die Funktion ruft sich selbst wieder auf, das heißt wenn ich in FreeMakro wieder FreeMakro aufrufe, dann IST das rekursion und kein iterativer ansatz!
  Mit Zitat antworten Zitat
Reinhard Kern

Registriert seit: 22. Okt 2006
772 Beiträge
 
#15

Re: Freigeben einer Pointerstruktur

  Alt 17. Jun 2009, 16:16
[quote="Reinhard KernIch würde die Liste von vorne durchlaufen und immer zuerst Next zwischenspeichern, bevor das aktuelle Element freigegeben wird.
[/quote]

Vorschlag:

Delphi-Quellcode:
destructor TMyObjectList.Destroy; override;
var CurrentObject,NextObject : TMyObject;

begin
CurrentObject := FirstObject; { wie auch immer }
if Assigned (CurrentObject) then { könnte ja leer sein }
  repeat
    NextObject := CurrentObject.Next;
    CurrentObject.Destroy;
    CurrentObject := NextObject;
  until not Assigned (CurrentObject;
inherited Destroy;
end;
Gruss Reinhard
  Mit Zitat antworten Zitat
Hybrid666

Registriert seit: 15. Jul 2006
Ort: Erster Stock
250 Beiträge
 
Delphi 7 Personal
 
#16

Re: Freigeben einer Pointerstruktur

  Alt 17. Jun 2009, 16:18
und wo gibst du (wie in meinem fall) die 2. unterliste frei? dann wird der code nämlich schon länger.
  Mit Zitat antworten Zitat
Reinhard Kern

Registriert seit: 22. Okt 2006
772 Beiträge
 
#17

Re: Freigeben einer Pointerstruktur

  Alt 17. Jun 2009, 16:25
Zitat von Hybrid666:
Ich glaub du solltest dir erstmal klar drüber werden was rekursion ist...
Rekursion heißt die Funktion ruft sich selbst wieder auf, das heißt wenn ich in FreeMakro wieder FreeMakro aufrufe, dann IST das rekursion und kein iterativer ansatz!
Danke für die Belehrung, Rekursion habe ich schon mit Jensen und Wirth gelernt, das war so etwa vor 25-30 Jahren. Aber deine Beschreibung kann genausogut Grundlage eines iterativen Verfahrens sein, das siehst du bloss nicht.

Gruss Reinhard
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:43 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz