获取方案中给定数量的总和

时间:2015-03-08 04:00:11

标签: scheme

嗨我希望我的函数对数字求和,使得结果小于10(77 = 14 = 5)。不知道为什么它通过基本案例

(define (reduct n)
  (if(< n 10) n
     (+(modulo n 10)(reduct (truncate(/ n 10))))))

1 个答案:

答案 0 :(得分:1)

添加后忘记再次致电reduct。这是固定版本:

(define (reduct n)
  (if (< n 10)
      n
      (reduct (+ (modulo n 10) (reduct (quotient n 10))))))

请注意,内部reduct递归实际上是多余的,可以删除,只留下:

(define (reduct n)
  (if (< n 10)
      n
      (reduct (+ (modulo n 10) (quotient n 10)))))

或者,如果您只想分割一次(并获得模数),您可以使用R7RS floor/程序:

(define (reduct n)
  (if (< n 10)
      n
      (reduct (call-with-values (lambda () (floor/ n 10)) +))))

(顺便说一下,这是一个纯循环.Ruby版本看起来像:

def reduct(n)
  n = n % 10 + n / 10 while n >= 10
  n
end

或(仅针对一分法)

def reduct(n)
  n = n.divmod(10).reduce(:+) while n >= 10
  n
end

除了使用与Scheme版本不同的突变外。)

但是,正如我的评论所说,结果将始终与执行(modulo n 9)相同(除了0应该变为9,因此(+ (modulo (- n 1) 9) 1)可能更正确),所以如果你&#39 ;为了数字目的而做这个,或者不是一个需要你去做的功课,而且只是使用它。