嗨我希望我的函数对数字求和,使得结果小于10(77 = 14 = 5)。不知道为什么它通过基本案例
(define (reduct n)
(if(< n 10) n
(+(modulo n 10)(reduct (truncate(/ n 10))))))
答案 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 ;为了数字目的而做这个,或者不是一个需要你去做的功课,而且只是使用它。