Skip to content

Instantly share code, notes, and snippets.

@ashaindlin
Last active August 29, 2015 14:23
Show Gist options
  • Save ashaindlin/7a43f4ce6f6a298638c2 to your computer and use it in GitHub Desktop.
Save ashaindlin/7a43f4ce6f6a298638c2 to your computer and use it in GitHub Desktop.
Tail recursion in the Racket repl
Welcome to Racket v5.3.6.
-> (define (factorial-no-tail n)
(if (= n 0)
1
(* n (factorial-no-tail (- n 1)))))
-> (require racket/trace)
-> (trace factorial-no-tail)
-> (factorial-no-tail 6)
>(factorial-no-tail 6)
> (factorial-no-tail 5)
> >(factorial-no-tail 4)
> > (factorial-no-tail 3)
> > >(factorial-no-tail 2)
> > > (factorial-no-tail 1)
> > > >(factorial-no-tail 0)
< < < <1
< < < 1
< < <2
< < 6
< <24
< 120
<720
720
-> (define (factorial-tail n acc)
(if (= n 0)
acc
(factorial-tail (- n 1) (* n acc))))
-> (trace factorial-tail)
-> (factorial-tail 6 1)
>(factorial-tail 6 1)
>(factorial-tail 5 6)
>(factorial-tail 4 30)
>(factorial-tail 3 120)
>(factorial-tail 2 360)
>(factorial-tail 1 720)
>(factorial-tail 0 720)
<720
720
@ashaindlin
Copy link
Author

I actually have (require racket/trace) in my .racketrc, but I figured I'd show it for completeness/to avoid confusing people.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment