この質問はSICP(演習1.26) にあります。「正方形」の定義がなければ、より遅く実行されます。 数字がプライムかどうかのチェックを目指しています。 これは迅速バージョンである:O(N)と言われて「正方形」の定義がないと、なぜこの機能が遅くなるのですか?
(* (expmod base (/ exp 2) m)
(expmod base (/ exp 2) m))
を使用し、 "四角" の定義がなければ
この質問はSICP(演習1.26) にあります。「正方形」の定義がなければ、より遅く実行されます。 数字がプライムかどうかのチェックを目指しています。 これは迅速バージョンである:O(N)と言われて「正方形」の定義がないと、なぜこの機能が遅くなるのですか?
(* (expmod base (/ exp 2) m)
(expmod base (/ exp 2) m))
を使用し、 "四角" の定義がなければ
あなたは必要square
を使用しない場合は、(expmod base (/ exp 2) m)
を2回評価してください。結果をlet
にバインドしてsquare
に渡すと、同じ複雑さになります。
より速いが、中間値のキャッシングを行う手順はsquare
ではありません。 let
を使用すると、同じくらい速いことになるだろう:
(let ((tmp (expmod base (/ exp 2) m)))
(* tmp tmp))
キーポイントは(expmod base (/ exp 2) m)
は一度だけ行われることです。