Scheme 没有“的定义;“正方形”;为什么这个函数较慢?
该问题位于SICP中(练习1.26) 它说,如果没有“正方形”的定义,它的运行速度会变慢。 它的目的是检查数字是否是素数。 这是更快的版本: 如果没有“正方形”的定义,请使用Scheme 没有“的定义;“正方形”;为什么这个函数较慢?,scheme,sicp,Scheme,Sicp,该问题位于SICP中(练习1.26) 它说,如果没有“正方形”的定义,它的运行速度会变慢。 它的目的是检查数字是否是素数。 这是更快的版本: 如果没有“正方形”的定义,请使用 据说是O(n)如果不使用平方,则需要计算(expmod base(/exp 2)m)两次。如果您使用let绑定结果并将其传递给square,那么它的复杂性将是相同的。如果您不使用square,则需要计算(expmod base(/exp 2)m)两次。如果将结果与let绑定,并将其传递给square,则其复杂性相同。使其
据说是O(n)如果不使用
平方
,则需要计算(expmod base(/exp 2)m)
两次。如果您使用let
绑定结果并将其传递给square
,那么它的复杂性将是相同的。如果您不使用square
,则需要计算(expmod base(/exp 2)m)
两次。如果将结果与let
绑定,并将其传递给square
,则其复杂性相同。使其更快的不是square
过程,而是中间值的缓存。使用let
将使它同样快速:
(let ((tmp (expmod base (/ exp 2) m)))
(* tmp tmp))
关键是
(expmod base(/exp 2)m)
只执行一次 使它更快的不是square
过程,而是中间值的缓存。使用let
将使它同样快速:
(let ((tmp (expmod base (/ exp 2) m)))
(* tmp tmp))
关键是(expmod base(/exp 2)m)
只执行一次