|
die frage iost eher, woher der erste teil kommt (und wieso)…
der zweite teil ist eigentlcih ganz logisch: schau dir mal an, was kleiner wird bei jedem rekursiven aufruf (denn sowas brauchst du ja). das ist der abstand zwischen n und k, denn n bleibt und k wächst. also ist das eine geeignete abstiegsfunktion.
die bedingung wenn n=k dann 0 ist hingegen überflüssig, denn wenn n=k, dann ist n-k sowieso 0.
als abstiegsfunktion wäre also volkommen ausreichend.
nebenbei bemerkt: auch die funktion zur berechnung sewlbst ist etwas ineffektiv,
fun keineTeiler (n,k) =
if real(k) > Math.sqrt(real(n)) then true
else not((n mod k) = 0) andalso keineTeiler (n,k+1);
wäre besser (wiel weniger durchläufe nötig), in dem fall bräuchte man dann in der abstiegsfunktion auch tatsächlcih eine bedingung damit sie zum ende 0 wird.
|