Autor Beitrag
martin300
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 186
Erhaltene Danke: 2



BeitragVerfasst: Mi 20.08.08 14:46 
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.

ausblenden 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 > 10then
  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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1405
Erhaltene Danke: 51

Win 7, Android
Turbo Delphi, Eclipse
BeitragVerfasst: Mi 20.08.08 14:53 
user profile iconmartin300 hat folgendes geschrieben:

ausblenden 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

_________________
Bringe einen Menschen zum grübeln, dann kannst du heimlich seinen Reis essen.
(Koreanisches Sprichwort)
martin300 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 186
Erhaltene Danke: 2



BeitragVerfasst: Mi 20.08.08 15:14 
Das war ein Tippfehler, soll natürlich "wert" sein.

ausblenden 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 > 10then
  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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 489
Erhaltene Danke: 14

Win 10, Win 8, Debian GNU/Linux
Delphi 10.1 Berlin, Java, C#
BeitragVerfasst: Mi 20.08.08 15:17 
Wie wär's mit folgendem?
ausblenden 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);
j.klugmann
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mi 20.08.08 15:18 
mit While oder?
ausblenden Delphi-Quelltext
1:
2:
  while gehtesmirgut=TRUE do
   Juhuuu! ;
:D
Tilman
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1405
Erhaltene Danke: 51

Win 7, Android
Turbo Delphi, Eclipse
BeitragVerfasst: Mi 20.08.08 15:20 
Du hast vergessen das ergebnis von getit result zuzuweisen seh ich grade ;)
// ah mal wieder zu spät ^^

_________________
Bringe einen Menschen zum grübeln, dann kannst du heimlich seinen Reis essen.
(Koreanisches Sprichwort)
martin300 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 186
Erhaltene Danke: 2



BeitragVerfasst: Mi 20.08.08 15:31 
Super danke.