University of Washington • CSE583 • D. Notkin © 2000
38
Converting to tail recursion
lProgrammers (and sometimes really smart compilers) can sometimes convert to tail recursion
l(define (fact n)
  (if (= n 0) 1
      (+ n
      (fact (- n 1))
  )))
lNot tail recursive (must do + after recursive call)
l(define (fact n)
(f-iter n 1))
l(define (f-iter n r)
l  (if (= n 0) result
l      (f-iter
l        (- n 1)
l        (* n result)
l       )))
•With a helper function, converted to tail recursion
l