对从b到b的整数求和的一种方法是将间隔分成两半,递归地对两半求和,然后将两个和加在一起。如果间隔具有奇数个整数,则尽可能地除以一半。您可以使用floor
函数返回小于某个实际值的最大整数。
(define sum-by-halves (lambda (a b) your_code_here))
有没有人有想法解决这个问题?
答案 0 :(得分:1)
如果要以递归方式解决问题,那么您需要i)识别停止条件,以及ii)找出如何将更大的问题分解为相同但更小的问题。你已经有了'ii'(细节除外)。我会是什么?
停止条件是两个数字'a'和'b'相同时。所以,你的出发点是:
(define (sum-by-halves a b)
(if (= a b)
a
...))
对于'...',你会想要'a'和'b'之间的'c'。
(define (sum-by-halves a b)
(if (= a b)
a
(let ((c (div (+ a b) 2)))
(+ (sum-by-halves a c)
(sum-by-halves (+ c 1) b)))))
选择div
我确保c
始终是一个整数,一半或一半不到一半。因此(+ c 1)
不会超过b
。注意:代码假定为(<= a b)
。