previous | index | next

Efficiency of reverse

     (define reverse
       (lambda (lst)
         (if (null? lst)
             '()
             (add-to-end (reverse (cdr lst))
                         (car lst)))))
     (define add-to-end
       (lambda (lst elt)
         (if (null? lst)
             (cons elt '())
             (cons (car lst)
                   (add-to-end (cdr lst) elt)))))

Q: If lst has n elements, how many conses does (reverse lst) do?
(Call this quantity R(n))

A: R(n) = conses done by
(reverse (cdr lst))
+ conses done by
(add-to-end ... )
= R(n-1) + n


previous | index | next