OCamlでより速いバージョンの指数関数を見つけるのが難しいです。ここで私は従うことをしようとしているいくつかの注意事項は次のとおりです。高速指数関数を作成する
- ではなく
expt b n ==> b * (b * (b ...)
の典型的な再帰的な指数のバージョンは、この機能は、B二つの引数を受け取り、nおよび基本的に分割統治スタンスを取ります。 - nが偶数の場合、nが、その後
fastexpt b n => b * (b^(n - 1))
奇数の場合は、その後、他のfastexpt b n => (b^(n/2))^2
は、ここで私はこれまでに書いたコードです:
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));;
は、私の質問は:書き込みする方法はありますが、 expt
機能を使用しないでこの機能を使用できますか? (私たちは、あなたがすでにexpt
を宣言したことを考慮すれば)何がここでやっていることは除算を使用して方法を最初に征服した後、残りの計算のための通常のものを使用している
を使用し、 '? –
おそらく私はOCamlの言語をあまりよく理解していませんが、もしfastexptを含めるなら、私はfastexptの最初の定義を "let rec"とする必要はありませんか? – Sean
@Sean、https://stackoverflow.com/help/how-to-askから: **質問を投稿してフィードバックにお答えください 投稿した後、少し質問をブラウザに残しておきます誰かがコメントしたら。明白な情報が欠けている場合は、質問を編集して対応する準備をしてください。 ** 質問をするときは、回答を受け入れ、コメントや回答に答えてください。あなたの質問には、奇妙な答えはありません。失礼しないでください。人々はここで助けてくれる、出かないで通信しないでください。 – Lhooq