我的完美号码功能有问题。代码的目的是确定数字是否是完美数字,这意味着它等于其除数的总和。例如:6。我的代码有问题。这是我的功能:
(define (is-perfect x)
(define (divides a b) (= (modulo b a) 0))
(define (sum-proper-divisors y)
(if (= y 1)
1
(if (divides y x)
(+ y (sum-proper-divisors (- y 1)))
(if (= x 1)
#f
(= (sum-proper-divisors (- x 1)
x)))))))
答案 0 :(得分:2)
你几乎得到了它!但是有几个问题。首先,您在sum-proper-divisors
中遗漏了一个案例:您问y
是否为(divides y x)
是否y
,但如果x
没有划分if
会发生什么? ?
第二个问题是,最后一个sum-proper-divisors
表达式必须在两个辅助程序的定义之外,目前它是在 (define (is-perfect x)
(define (divides a b)
(= (modulo b a) 0))
(define (sum-proper-divisors y)
(cond ((<= y 1)
1)
((divides y x)
(+ y (sum-proper-divisors (- y 1))))
(else
<???>))) ; what goes in here?
(if (= x 1)
#f
(= (sum-proper-divisors (- x 1)) x)))
内。正确地缩进代码会更容易找到这种错误。
这是正确解决方案的外观,因为这看起来像家庭作业我会让你填补空白:
{{1}}