BlattMax := BlattMax and BlattMax(inRefWurzel^.Links, inPfadMax);
Ersetze BlattMax durch Result. Also so:
Result := Result and BlattMax(inRefWurzel^.Links, inPfadMax);
Nebenbei: Es ist seit vielen Jahren üblich das Resultat einer Funktion via Result zurückzugeben.
Und wie bereits erwähnt: Der Code ist cool, wenn die Kurzschlussauswertung [Standard] eingeschaltet ist (d.h. in Delphi "Vollständige Boolesche Auswertung = AUS" ist).
Wenn die Kurzschlussauswertung eingeschaltet ist, dann berechnet Delphi den Ausdruck
Result and BlattMax(inRefWurzel^.Links, inPfadMax);
immer von links nach rechts nur solange bis das Resultat bekannt ist. Wenn also Result=false ist, dann ist bereits klar, dass
false and BlattMax(inRefWurzel^.Links, inPfadMax);
immer false ist (
0 and x ist immer 0), unabhängig vom Wert von
BlattMax(inRefWurzel^.Links, inPfadMax);
. Delphi berechnet also
BlattMax(inRefWurzel^.Links, inPfadMax);
nicht.
Falls aber "Vollständige Boolesche Auswertung = EIN" ist, rechnet Delphi immer auch
BlattMax(inRefWurzel^.Links, inPfadMax);
Es wird bei diesem Code dann immer der ganze Baum durchlaufen. Abhilfe: Code anpassen.
Der Hinweis zur Kurzschlussauswertung betrifft auch deine rekursive Funktion; genauer diese Zeile:
Zitat:
Result := (BlattMax(inRefWurzel^.links, inPfadMax)) and (BlattMax(inRefWurzel^.rechts, inPfadMax));