Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Rekursive Funktion
martin300 - Mi 20.08.08 14:46
Titel: Rekursive Funktion
Hallo,
bei einer Rekursiven Funktion würde ich gerne sobald ein passendes Ergebnis
geliefert wird abbrechen. Wie kann der Abbruch generell realisiert werden?
Als Beispiel habe ich folgende Funktion. Sie soll nur zum besseren Verständnis sein.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21:
| function Element.getit(suche: Integer; wert : Integer; anzahl : Integer) : Integer; var i : Integer; begin inc (anzahl); if (anzahl > 10) then begin result := -1; exit; end; if (suche = wert) then begin result := anzahl; exit; end; if (suche > wert) then getit(suche-1,wert, anzahl);
if (suche < ziffer) then getit(suche+1,wert, anzahl); end; |
Tilman - Mi 20.08.08 14:53
Titel: Re: Rekursive Funktion
martin300 hat folgendes geschrieben: |
Delphi-Quelltext 1: 2:
| if (suche > wert) then getit(suche-1,wert, anzahl); | |
An dem teil kann man es erkennen:
Wenn suche > wert wird mit suche - 1 fortgesetzt. Irgendwann ist suche = wert und die Rekursion wird nicht weiter ausgeführt -> sie bricht also ab.
Mit 2 verschiedenen Bedingungen, wie in deinem Beispiel, wird es schwierig: du musst gewährleisten dass die Rekursion immer abbricht. Woher Ziffer kommt ist mir übrigens schleierhaft.
Grüße,
tilman
martin300 - Mi 20.08.08 15:14
Das war ein Tippfehler, soll natürlich "wert" sein.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21:
| function Element.getit(suche: Integer; wert : Integer; anzahl : Integer) : Integer; var i : Integer; begin inc (anzahl); if (anzahl > 10) then begin result := -1; exit; end; if (suche = wert) then begin result := anzahl; exit; end; if (suche > wert) then getit(suche-1,wert, anzahl);
if (suche < wert) then getit(suche+1,wert, anzahl); end; |
Mir geht es dabei um die Abbruchbedingung. Die Funktion ruft sich immer wieder selbst auf solange keine Abbruch ( in diesem Fall, Anzahl der Versuche od. gefundener Wert zutrifft). Trifft das Ergebnis zu wird wieder aus den Funktionen herausiteriert. Problem dabei das Ergebnis wird immer wieder überschrieben. Wie löse ich das? Mich würde eine allgemeine Lösung interessieren.
baka0815 - Mi 20.08.08 15:17
Wie wär's mit folgendem?
Delphi-Quelltext
1: 2: 3: 4: 5:
| if (suche > wert) then Result := getit(suche-1,wert, anzahl);
if (suche < wert) then Result := getit(suche+1,wert, anzahl); |
Delete - Mi 20.08.08 15:18
mit While oder?
Delphi-Quelltext
1: 2:
| while gehtesmirgut=TRUE do Juhuuu! ; |
:D
Tilman - Mi 20.08.08 15:20
Du hast vergessen das ergebnis von getit result zuzuweisen seh ich grade ;)
// ah mal wieder zu spät ^^
martin300 - Mi 20.08.08 15:31
Super danke.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!