Если вы начнете со своей функции, написав несколько примеров, вам будет легче представить, как ваша функция будет работать.
Вот три примера:
(check-expect (SquareOfSums 0) 0)
(check-expect (SquareOfSums 2) (sqr (+ 2 1))) ;9
(check-expect (SquareOfSums 10) (sqr (+ 10 9 8 7 6 5 4 3 2 1))) ;3025
Как мыМожно ясно видеть, что мы используем два оператора, которые должны указывать на то, что нам нужно использовать какую-то вспомогательную функцию, чтобы выручить нас.
Мы можем начать с нашей основной функции squareOfSums
:
(define (squareOfSums n)
(sqr (sum n)))
Теперь нам нужно создать вспомогательную функцию.
Сколько раз вы используете оператор сложения, зависит от числа, которое вы используете.По этой причине нам придется использовать естественную рекурсию.
Использование естественной рекурсии требует некоторого базового случая для того, чтобы функция где-то «заканчивалась».В данном случае это значение 0
.
Теперь, когда мы определили базовый случай, мы можем создать нашу вспомогательную функцию без особых проблем:
(define (sum n)
(if (= 0 n)
0
(+ n (sum (sub1 n)))))