[Current] [News] [Glance] [Discussions] [Instructions] [Search] [Links] [Handouts] [Outlines] [Readings] [Labs] [Homeworks] [Quizzes] [Exams] [Examples] [Fall2000.01] [Spring2000]
Please go over the short reading on tail recursion.
Identify two (or more) tail-recursive procedures you've written already.
Try the two versions of factorial on some numbers that are big enough that you can observe a running time by counting ("one thousand one one thousand two ..."). Do you observe any significant difference in running times?
add-to-all
Tail Recursive
a. Make add-to-all
tail recursive by using the list of
things already added to as the accumulator (the second parameter to the kernel)
and using append
to extend the accumulator.
b. Make add-to-all
tail recursive by using the reverse
of the list of things already added to as the accumulator and
cons
to extend the accumulator.
c. Try some examples to see if you can determine whether or not there is a substantial difference in the running times of the three versions.
Write a tail-recursive longest-string-on-list
procedure.
Define a procedure index
that has two arguments, an item
a
and a list of items ls
, and returns the index
of a
in ls
, that is, the zero-based location of
a
in ls
. If the item is not in the list, the
procedure returns -1. Test your procedure on:
(index 3 '(1 2 3 4 5 6)) ===> 2 (index 'so '(do re mi fa so la ti do)) ===> 4 (index 'a '(b c d e)) ===> -1 (index 'cat '()) ===> -1
Define and test a tail-recursive version of Iota
.
[Current] [News] [Glance] [Discussions] [Instructions] [Search] [Links] [Handouts] [Outlines] [Readings] [Labs] [Homeworks] [Quizzes] [Exams] [Examples] [Fall2000.01] [Spring2000]
Disclaimer Often, these pages were created "on the fly" with little, if any, proofreading. Any or all of the information on the pages may be incorrect. Please contact me if you notice errors.
This page may be found at http://www.cs.grinnell.edu/~rebelsky/Courses/CS151/2000F/Labs/tail-recursion.html
Source text last modified Mon Oct 30 10:49:40 2000.
This page generated on Mon Oct 30 10:53:24 2000 by Siteweaver. Validate this page's HTML.
Contact our webmaster at rebelsky@grinnell.edu