Das Laufzeit-Verhalten dieser Funktion ist vom Zufall abhängig. Die
Terminiertheit kann für diese Funktion nicht bewiesen werden. Damit birgt sie die theoretische Gefahr eines Programm-Absturzes. In der Praxis wird sie meist in Sekundenbruchteilen ein korrektes Ergebnis liefern. In größeren Systemen sollten derartige Algorithmen vermieden werden. Stattdessen kann die Funktion auch mit konstantem Laufzeitverhalten (O(1)) implementiert werden:
Delphi-Quellcode:
funtion MyRand(Range: Integer): Integer;
var
DividedRange: Integer;
begin
DividedRange := Range div 4;
Result := Random(DividedRange) * 4;
end;
Das mit dem Terminieren ist richtig, aber erstens war es nur ein Vorschlag, zweitens sollte man einen Basis-Generator, der keine durch 4 teilbaren Zahlen liefert, in die Tonne treten, drittens funktioniert mein Vorschalg in der Praxis, während Deiner total daneben sein kann. Beispiel: Für Range=22 wird bei Dir nie der Wert 20 geliefert.