Вы бы использовали так называемую итеративную рекурсивную функцию, которая по времени равна O (N), так как для ее завершения требуется N (N - количество слов) и O (1) в пространстве, поскольку каждая итерация содержит свою собственное состояние в аргументах функции.
(define (reverse sentence-to-reverse)
(reverse-iter (sentence-to-reverse ""))
(define (reverse-iter(sentence, reverse-sentence)
(if (= 0 string-length sentence)
reverse-sentence
( reverse-iter( remove-first-word(sentence), add-first-word(sentence, reverse-sentence)))
Примечание: я написал это на схеме, которую я начинающий, поэтому извиняюсь за отсутствие правильной манипуляции со строками.
remove-first-word находит первую границу слова в предложении, затем берет этот раздел символов (включая пробел и пунктуацию), удаляет его и возвращает новое предложение
add-first-word находит первую границу слова в предложении, затем берет этот раздел символов (включая пробел и пунктуацию) и добавляет его в обратное предложение и возвращает новое содержимое обратного предложения.