获取方案中给定数字的总和
Get the Sum of given number in scheme
您好,我希望我的函数对数字求和,使得结果小于 10 (77 = 14=5)。不知道为什么它通过了基本案例
(define (reduct n)
(if(< n 10) n
(+(modulo n 10)(reduct (truncate(/ n 10))))))
您添加后忘记再次调用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)
可能更正确),所以如果你我这样做是为了命理目的,或者不是要求你做的家庭作业 "hard way",就用它吧。
您好,我希望我的函数对数字求和,使得结果小于 10 (77 = 14=5)。不知道为什么它通过了基本案例
(define (reduct n)
(if(< n 10) n
(+(modulo n 10)(reduct (truncate(/ n 10))))))
您添加后忘记再次调用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)
可能更正确),所以如果你我这样做是为了命理目的,或者不是要求你做的家庭作业 "hard way",就用它吧。