Итерационный сумму, используя рекурсию


Учитывая следующее рекурсивное определение суммы:

(define (sum term a next b)
  (if (> a b)
      0
      (+ (term a)
         (sum term (next a) next b))))

И задач:

Упражнение 1.30

Порядок суммы выше создает линейной рекурсии. Процедура может быть переписана так, что сумма выполняется итерационно. Показать как сделать это, заполнив недостающие выражения в следующем определение:

(define (sum term a next b)
  (define (iter a result)
    (if <??>
        <??>
        (iter <??> <??>)))
  (iter <??> <??>))

Я написал следующий код. Что вы думаете?

(define (i-sum term a next b)
  (define (iter a result)
    (if (> a b)
        result
        (iter (next a) (+ result (term a)))))
  (iter a 0))

(define (identity x) x)
(define (inc x) (+ 1 x))
(define (sum-integers a b) (i-sum identity a inc b))


1418
0
задан 30 марта 2011 в 01:03 Источник Поделиться
Комментарии
1 ответ

Я считаю, что ваш ответ правильный, хотя я не уверен, почему вы нуждаетесь в личности, Инк, и сумма чисел порядок на дне вашего решения.

2
ответ дан 30 марта 2011 в 02:03 Источник Поделиться