Functional Problem Solving (CSC 151 2013F) : Outlines

Outline 24: Recursion Basics


Held: Wednesday, 9 October 2013

Back to Outline 23 - Revisiting Lists. On to Outline 25 - Pause for breath.

Summary

We begin our exploration of recursion, the most general form of repetition available in Scheme. You can use recursion to both build and iterate over different kinds of values.

Related Pages

Overview

Administrivia

Repetition

Some Challenges

Recursion

Recursion in Scheme

Remember that I tend to think in abstractions first. But we'll look at some concrete forms, too.

Here's the form of a typical recursive procedure:

(define *proc*
  (lambda (*val*)
    (if (*base-case-test*)
        (*base-case* *val*)
        (*combine* (*partof* *val*)
                    (*proc* (*update* *val*))))))

When the value you're working with is a list and your base case is the null list, the form is somewhat simpler:

(define *proc*
  (lambda (*lst*)
    (if (null? *lst*)
        *null-case*
        (*combine* (*onestep* (car *lst*))
                   (*proc* (cdr *lst*))))))

Sometimes it's useful to grab the recursive result first, particularly if you're going to use it in multiple ways.

(define *proc*
  (lambda (*lst*)
    (if (null? *lst*)
        *null-cse*
        (let ((recursive-result (*proc* (cdr *lst*))))
          (if (*test*)
              (*combine1* (*step1* (car *lst*)) recursive-result)
              (*combine2* (*step2* (car *lst*)) recursive-result))))))

Lab


Samuel A. Rebelsky, rebelsky@grinnell.edu

Copyright (c) 2007-2013 Janet Davis, Samuel A. Rebelsky, and Jerod Weinman. (Selected materials are copyright by John David Stone or Henry Walker and are used with permission.)

Creative Commons License

This work is licensed under a Creative Commons Attribution 3.0 Unported License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc/3.0/ or send a letter to Creative Commons, 543 Howard Street, 5th Floor, San Francisco, California, 94105, USA.