madRAM
01.12.2004, 18:33
Hi Leute,
ich habe hier ein kleines Problem mit einer rekursiven Funktion. Ich moechte einen Binaeren Baum der Art:
type
tRefBinBaum = ^ tBinBaum;
tBinBaum = record
links,
rechts : tRefBinBaum;
info : integer
end;
(also den Pascal Klassiker) mit einer rekursiven Funktion nach einer gegebenen Zahl durchsuchen lassen. Meine Funktion sieht dabei so aus:
function BTSearchLeafRek ( inZahl : integer;
inRefWurzel : tRefBinBaum ) : tRefBinBaum;
var
Zeiger : tRefBinBaum;
begin
if (Zeiger <> nil) then
begin
if inZahl < Zeiger^.info then
Zeiger := BTSearchLeafRek (inZahl, Zeiger^.links);
if inZahl > Zeiger^.info then
Zeiger := BTSearchLeafRek (inZahl, Zeiger^.rechts);
BTSearchLeafRek := Zeiger;
end
end;
und gibt mir - fuer alte Hasen wahrscheinlich erwartungsgemaess - einen runtime Error.
Ich hab hier mal gleich zwei Fragen:
1. Ist es ein Denkfehler anzunehmen, dass die Rueckgabezeile innerhalb der if-Abfrage stattfinen muss. Ich glaube irgendwie, wenn ich sie ausserhalb der if-Abfrage unterbringe, dass dann Zeiger IMMER mit nil zurueckgegeben wuerde - oder hab ich da das Konzept der Rekursion nicht verstanden?
2. Muss ich denn wirklich noch eine boolsche Abrage der Art
if (Zeiger <> nil) and not gefunden then
in diese Funktion einbringen. In dem Fall waere doch die ganze Rekursionssache irgendwie bloed, oder?
3. Wie waere diese if-Abfrage:
if (Zeiger <> nil) and Zeiger^.info <> inZahl then
ist das geschickter?
Naja, das waren dann nun doch wieder 3 Fragen, aber egal. Freue mich auf heftigste Kritik und noch mehr gute Ratschlaege ;-)
chris
ich habe hier ein kleines Problem mit einer rekursiven Funktion. Ich moechte einen Binaeren Baum der Art:
type
tRefBinBaum = ^ tBinBaum;
tBinBaum = record
links,
rechts : tRefBinBaum;
info : integer
end;
(also den Pascal Klassiker) mit einer rekursiven Funktion nach einer gegebenen Zahl durchsuchen lassen. Meine Funktion sieht dabei so aus:
function BTSearchLeafRek ( inZahl : integer;
inRefWurzel : tRefBinBaum ) : tRefBinBaum;
var
Zeiger : tRefBinBaum;
begin
if (Zeiger <> nil) then
begin
if inZahl < Zeiger^.info then
Zeiger := BTSearchLeafRek (inZahl, Zeiger^.links);
if inZahl > Zeiger^.info then
Zeiger := BTSearchLeafRek (inZahl, Zeiger^.rechts);
BTSearchLeafRek := Zeiger;
end
end;
und gibt mir - fuer alte Hasen wahrscheinlich erwartungsgemaess - einen runtime Error.
Ich hab hier mal gleich zwei Fragen:
1. Ist es ein Denkfehler anzunehmen, dass die Rueckgabezeile innerhalb der if-Abfrage stattfinen muss. Ich glaube irgendwie, wenn ich sie ausserhalb der if-Abfrage unterbringe, dass dann Zeiger IMMER mit nil zurueckgegeben wuerde - oder hab ich da das Konzept der Rekursion nicht verstanden?
2. Muss ich denn wirklich noch eine boolsche Abrage der Art
if (Zeiger <> nil) and not gefunden then
in diese Funktion einbringen. In dem Fall waere doch die ganze Rekursionssache irgendwie bloed, oder?
3. Wie waere diese if-Abfrage:
if (Zeiger <> nil) and Zeiger^.info <> inZahl then
ist das geschickter?
Naja, das waren dann nun doch wieder 3 Fragen, aber egal. Freue mich auf heftigste Kritik und noch mehr gute Ratschlaege ;-)
chris