University of Washington • CSE583 • D. Notkin
©
2000
38
Converting to tail recursion
l
Programmers (and
sometimes really smart
compilers) can
sometimes convert to tail
recursion
l
(define (fact n)
(if (= n 0) 1
(+ n
(fact (- n 1))
)))
l
Not 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