Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Habe ein Beispiel aus dem Skript! In diesem Beispiel ist mir nicht ganz klar, ob ich es richtig Verstanden habe.. Deswegen habe ich mal bei den einzelnen Schritten dazugeschrieben was passiert denke ich da richtig?
- In der Rekursions Ebene 2 wird mir das Beispiel unklar...
- Nehmen wir an wir haben eine Lineare Liste mit den Werten Adresse1(Wurzel) (10), Adresse2 (12), Adresse3 (20)!
- Wobei 10 die Wurzel ist, da es ja der erste Wert ist und 12 der gesuchte wert ist, der entfernt werden soll.
- -------------------------------------------------
- Beispiel 6.2.6 (Skript)
- Wir geben eine rekursive Prozedur für das Entfernen eines Elementes aus einer Liste
- an
- -------------------------------------------------
- procedure ListenElemEntfernen (inZahl : integer;
- var ioRefAnfang : tRefListe;
- var outGefunden : boolean);
- { entfernt aus einer Liste mit Anfangszeiger ioRefAnfang das Element mit dem Wert inZahl, bei erfolgreicher Entfernung wird outGefunden
- auf truegesetzt, sonst auf false }
- var
- Zeiger : tRefListe;
- gefunden : boolean;
- begin
- if ioRefAnfang = nil then
- gefunden := false
- else
- if ioRefAnfang^.info = inZahl then
- { Element gefunden, also entfernen }
- begin
- Zeiger := ioRefAnfang;
- ioRefAnfang := ioRefAnfang^.next;
- dispose (Zeiger);
- gefunden := true
- end
- else
- { Element noch nicht gefunden, es folgt dasrekursive Durchsuchen des Listenrestes }
- ListenElemEntfernen (inZahl, ioRefAnfang^.next, gefunden);
- outGefunden := gefunden
- end; { ListenElemEntfernen }
- -------------------------------------------------
- Also laufen wir das Programm das erste mal durch!
- ioRefAnfang zeigt beim ersten Aufruf auf die Wurzel der Liste!
- 1. if ioRefAnfang = nil... Trifft nicht zu
- 2. Er springt zum else Teil
- 3. if ioRefAnfang^.info = inZahl then .. Trifft nicht zu, da die gesuchte Zahl nicht in der Wurzel ist und der Aktuell wert ja 10 ist..
- 4. Er springt also in die Else Anweisung und die Funktion ruft sich nochmal selbst auf! Siehe nächste Zeile
- ListenElemEntfernen (inZahl, ioRefAnfang^.next, gefunden); ioRefAnfang^.Next zeigt hier ja Quasi noch auf Wurzel.Next, da es ein VAR-Parameter ist!
- -------------------------------------------------
- Wir kommen in die Rekursionsebene Nr.2
- HIER BIN ICH MIR NICHT SICHER WAS PASSIERT
- Jetzt Zeigt ioRefAnfang auf des 2 ListenElement mit dem Gesuchtenwert 12..
- 1. if ioRefAnfang = nil... Trifft nicht zu
- 2. er springt zum Else Teil und prüft ob die gesuchte Zahl in ioRefAnfang^.Info steht, was auch stimmt somit werden die Anweisungen der else Anweisung ausgeführt
- 2.1 Zeiger := ioRefAnfang; {Hier wird Zeiger auf Adresse2 (l2) gesetzt, der VAR-Variable (ioRefAnfang) wird ja nichts zugewiesen}
- 2.2 ioRefAnfang := ioRefAnfang^.next; (Adresse2 soll auf Adresse3 zeigen, allerdings wird somit auch ioRefAnfang^.Next(Wurzel) auf Adresse 3 gesetzt, wegen dem Var-Parameter ODER???)
- 3.3 dispose (Zeiger); (Speicher von Zeiger wird freigegeben)
- 3.4 gefuden := True;
- 4. outGefunden := gefunden;
- Schliesen der Rekursionsebene 2
- Nun wird in der ersten Ebene noch outGefunden auf gefunden gesetzt..
- -------------------------------------------------
- Ist das so richtig? Bin mir da echt nicht sicher ab der 2ten Ebene..
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement