Je n'arrive pas à trouver une version plus rapide de la fonction d'exposant typique dans OCaml. Voici quelques lignes directrices que je suis en train de suivre:Création d'une fonction d'exposant rapide
- plutôt que la version exposant récursive typique de cette fonction
expt b n ==> b * (b * (b ...)
reçoit deux arguments b et n et prend essentiellement diviser pour régner position. - Si n est pair, alors
fastexpt b n => (b^(n/2))^2
autre si n est impair alorsfastexpt b n => b * (b^(n - 1))
Voici le code que je l'ai écrit jusqu'à présent:
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));;
Ma question est: Est-il possible d'écrire cette fonction sans utiliser la fonction expt
?
Utiliser 'fastexpt' à la place? –
Peut-être que je ne comprends pas très bien le langage OCaml, mais si je devais inclure fastexpt alors ne devrais-je pas faire la définition initiale de fastexpt comme "laisser rec"? – Sean
@Sean, à partir de https://stackoverflow.com/help/how-to-ask: ** Postez la question et répondez aux commentaires Une fois que vous postez, posez la question dans votre navigateur, et voyez si quelqu'un commente. Si vous avez manqué un élément d'information évident, soyez prêt à répondre en modifiant votre question pour l'inclure. Si quelqu'un publie une réponse, soyez prêt à l'essayer et à lui faire part de vos commentaires! ** Lorsque vous posez une question, acceptez les réponses et répondez aux commentaires ou aux réponses. Toutes vos questions n'ont pas de réponse acceptée ce qui est étrange. Ne soyez pas impoli, les gens sont là pour vous aider, ne partez pas et ne communiquez pas. – Lhooq