Functional languages such as Scheme and J are useful in teaching recursion and iteration to introductory students. The exercise of writing the continuation of each recursive call in a definition forces students to think about the definition. Students also find that the alternate view of recursion as a composition of continuation functions gives a new perspective on recursive definitions. Identifying tail-recursive definitions or transforming non tail-recursive definitions into tail-recursive definitions is a useful exercise which helps enhance understanding of the algorithm. This author has found Scheme and J to be equally effective in the teaching of recursion and iteration. Both languages have significant advantages, particularly when used for exposition, over imperative languages.