在Scheme中编写递归过程。 (总和一半)

时间:2013-10-12 16:46:23

标签: scheme racket

对从b到b的整数求和的一种方法是将间隔分成两半,递归地对两半求和,然后将两个和加在一起。如果间隔具有奇数个整数,则尽可能地除以一半。您可以使用floor函数返回小于某个实际值的最大整数。

(define sum-by-halves (lambda (a b) your_code_here))

有没有人有想法解决这个问题?

1 个答案:

答案 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)