【发布时间】:2013-09-22 01:30:48
【问题描述】:
谁能给我解释一下下面的函数是如何递归工作的。我可以理解更简单的递归示例,但我不明白 (smooth n (- k 1)) 如何在此处的 or 语句下给出所需的值。
(define (divides a b)
(= (modulo b a) 0))
(define (smooth n k)
(and (>= k 2)
(or (divides k n)
(smooth n (- k 1)))))
(define (isprime p)
(if (< p 2)
#f
(not (smooth p (floor (sqrt p))))))
我写了一个 isprime 函数,它不使用 1 作为质数,但我仍然不太明白上述函数是如何工作的/它是如何与这个示例一起工作的。
【问题讨论】:
-
这不是格式正确或可运行的代码。这个案例相当简单,但您能否为每个人的方便进行调整,特别是如果新用户发现这个问题,它也对他们有用。
-
smooth n k = Exists i In (k,k-1,...,2) SuchThat (n%i==0)。isprime p = p>=2 && not (smooth p [sqrt p])。名字的选择是不幸的:smooth numbers 是别的东西。反向测试顺序更好 - 数字更可能具有较小的因素而不是较大的因素。