Хорошо, вот один ответ, который математик дал бы: сумма всех целых чисел от a
до b
равна половине суммы целых чисел от a
до b
плюс сумма всех целых чисел от b
до a
.И это a + b + a + 1 + b - 1 + ... + b + a
, что a + b + a + b + ... + a + b
.А это, в свою очередь, (a + b) * (b - a + 1)
.Таким образом, итоговая сумма равна (a + b) * (a - b + 1) / 2
.Поэтому просто напишите это в Лиспе с указанным дополнительным условием, что для b < a
:
(define (sum-a-b a b)
(if (> a b)
0
(/ (* (+ a b) (+ (- b a) 1)) 2)))
Конечно, то, что, вероятно, ищется, является либо рекурсивным, либо итеративным ответом.Любой из них является ужасным решением проблемы: рекурсивный ответ ужасен как во временной, так и в пространственной сложности, в то время как итеративный ответ просто ужасен с точки зрения временной сложности.
Люди, которые учат Лисп, должны прекратить активно пытатьсяучить людей плохо программировать.