Ich habe Probleme, eine schnellere Version der typischen Exponentenfunktion in OCaml zu finden. Hier sind einige Richtlinien, die ich zu folgen bin versucht:Erstellen einer schnellen Exponentenfunktion
- Anstatt die typische rekursive Exponent Version von
expt b n ==> b * (b * (b ...)
diese Funktion erhält zwei Argumente b und n und nimmt grundsätzlich eine Kluft und Haltung erobern. - Wenn n gerade ist, dann
fastexpt b n => (b^(n/2))^2
sonst, wenn n ungerade ist dannfastexpt b n => b * (b^(n - 1))
Hier ist der Code, den ich geschrieben habe, so weit:
let fastexpt : int -> int -> int
= fun b n ->
if n = 0 then 1
else if ((n mod 2) = 0) then (expt b (n/2)) * (expt b (n/2))
else b * (expt b (n - 1));;
Meine Frage ist: Gibt es eine Möglichkeit zu schreiben diese Funktion ohne die expt
Funktion zu verwenden?
Verwenden 'fastexpt' statt? –
Vielleicht verstehe ich die OCaml-Sprache nicht so gut, aber wenn ich fastexpt einbinden müsste, müsste ich dann nicht die anfängliche Definition von "fastexpt" als "let rec" definieren? – Sean
@Sean, von https://Stackoverflow.com/help/how-to-ask: ** Stellen Sie die Frage und reagieren Sie auf Feedback Nach dem Post, lassen Sie die Frage in Ihrem Browser für ein bisschen offen, und sehen wenn jemand Kommentare gibt. Wenn Sie eine offensichtliche Information verpasst haben, seien Sie bereit, zu antworten, indem Sie Ihre Frage bearbeiten, um sie aufzunehmen. Wenn jemand eine Antwort postet, sei bereit, es auszuprobieren und Feedback zu geben! ** Bitte, wenn Sie eine Frage stellen, Antworten akzeptieren und auf Kommentare oder Antworten antworten. Alle deine Fragen haben keine akzeptierte Antwort, was merkwürdig ist. Sei nicht unhöflich, die Leute sind hier, um zu helfen, geh nicht und kommuniziere. – Lhooq