方案递归完美数(初学者,希望简单的办法)(SCHEME recursion perfect numb

2019-09-22 08:17发布

有我的完美数函数的问题。 代码的目的是确定的数量是一个完美的数字,这意味着它是等于其约数的总和。 例如: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)))))))

Answer 1:

你几乎得到它! 有一对夫妇的问题,虽然。 首先,你缺少的情况下sum-proper-divisors :你问y是一个,如果(divides yx)但如果发生什么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)))


文章来源: SCHEME recursion perfect number (beginner, hopefully easy fix)