University of California, Berkeley
EECS Department - Computer Science Division

CS3 Lecture 7 : Recursion and Patterns

Thanks to Oliver Grillmeyer and Brendan Ferguson for many of the ideas for these notes


Overview of today's lecture


Answers to questions that have come up

Review

Recursion

An algorithmic technique where a function, in order to accomplish a task, calls itself with some part of the task.

Example problems we saw

Recursion doesn't have to be limited to sentence manipulation, consider sum-0-to-n

;; sum-0-to-n
;;
;; INPUTS       : A positive integer, n
;; REQUIRES     : The input be a positive integer
;; SIDE-EFFECTS : None
;; RETURNS      : The sum of all numbers from 0 to n.
;; EXAMPLE      : (sum-0-to-n 1) ==> 1
;;              : (sum-0-to-n 5) ==> 15 ;; 1+2+3+4+5=15

(define (sum-0-to-n n)
==>
==>
==>
: (sum-0-to-n 0)
==>

: (sum-0-to-n 5)
==>

: (sum-0-to-n -1) ;; violates our requirement
==>


Recursion and Patterns

Overview

Powerful sentence functions we've seen

Recursive patterns we'll see on sentences

Mapping Example : square-all

;; square-all
;;
;; INPUTS       : A sentence of numbers
;; REQUIRES     : The input be a simple linear sentence of numbers
;; SIDE-EFFECTS : None
;; RETURNS      : A sentence of the same size as the input, but with
;;              : all elements squared.
;; EXAMPLE      : (square-all '()) ==> ()
;;              : (square-all '(1 2 3 4)) ==> (1 4 9 16)

: (define (square x) (* x x))
square

(define (square-all L)
==>
==>
==>
: (square-all '())
==>

: (square-all '(1 2 3 4))
==>

Finding Example : member-even

;; member-even
;;
;; INPUTS       : A sentence of numbers
;; REQUIRES     : The input be a simple linear sentence of numbers
;; SIDE-EFFECTS : None
;; RETURNS      : The rest of the sentence starting with the first even #
;;              : and #f if none exists (just like member would have)
;; EXAMPLE      : (member-even '())        ==> #f
;;              : (member-even '(1 2 3 4)) ==> (2 3 4)
;;              : (member-even '(1 3 5 7)) ==> #f

(define (member-even L)
==>
==>
==>
: (member-even '())
==>

: (member-even '(1 2 3 4))
==>

: (member-even '(1 3 5 7))
==>

Counting Example : count-evens

;; count-evens
;;
;; INPUTS       : A sentence of numbers
;; REQUIRES     : The input be a simple linear sentence of numbers
;; SIDE-EFFECTS : None
;; RETURNS      : The number of even numbers in the sentence
;; EXAMPLE      : (count-evens '())        ==> 0
;;              : (count-evens '(1 2 3 4)) ==> 2
;;              : (count-evens '(2 4 6 8)) ==> 4
;;              : (count-evens '(1 3 5 7)) ==> 0

(define (count-evens L)
==>
==>
==>
==>
: (count-evens '())
==>

: (count-evens '(1 2 3 4))
==>

: (count-evens '(2 4 6 8))
==>

: (count-evens '(1 3 5 7))
==>

Filtering Example : remove-evens

;; remove-evens
;;
;; INPUTS       : A sentence of numbers
;; REQUIRES     : The input be a simple linear sentence of numbers
;; SIDE-EFFECTS : None
;; RETURNS      : The sentence with the even numbers removed
;; EXAMPLE      : (remove-evens '())        ==> ()
;;              : (remove-evens '(1 2 3 4)) ==> (1 3)
;;              : (remove-evens '(2 4 6 8)) ==> ()
;;              : (remove-evens '(1 3 5 7)) ==> (1 3 5 7)

(define (remove-evens L)
==>
==>
==>
==>
==>
: (remove-evens '())
==>

: (remove-evens '(1 2 3 4))
==>

: (remove-evens '(2 4 6 8))
==>

: (remove-evens '(1 3 5 7))
==>

Testing Example : all-evens?

;; all-evens? (can also be thought of as (not (any-odds? L)) )
;;
;; INPUTS       : A sentence of numbers
;; REQUIRES     : The input be a simple linear sentence of numbers
;; SIDE-EFFECTS : None
;; RETURNS      : #t if the entire sentence is even, #f otherwise
;;              : This can also be thought of as (not (any-odds? L))
;; EXAMPLE      : (all-evens? '())        ==> #t
;;              : (all-evens? '(1 2 3 4)) ==> #f
;;              : (all-evens? '(2 4 6 8)) ==> #t
;;              : (all-evens? '(1 3 5 7)) ==> #f

(define (all-evens? L)
==>
==>
==>
==>
: (all-evens? '())
==>

: (all-evens? '(1 2 4 8))
==>

: (all-evens? '(2 4 6 8))
==>

: (all-evens? '(1 3 5 7))
==>

Combining Example : get-min

;; get-min
;;
;; INPUTS       : A sentence of numbers
;; REQUIRES     : The input be a simple linear sentence of numbers
;;              : The sentence have length at least one (min of nothing undefined)
;; SIDE-EFFECTS : None
;; RETURNS      : The minimum element in the sentence
;; EXAMPLE      : (get-min '(795))     ==> 795
;;              : (get-min '(3 1 4 1)) ==> 1

(define (get-min L)
==>
==>
==>
: (get-min '(795))
==>

: (get-min '(3 1 4 1))
==>

: (get-min '())  ;; This violates our requirements
==>


Summary

Next Time

Puzzle : Scrambled box tops [Martin Gardner "My Best Mathematical and Logic Puzzles", Dover Press, 1994]

Game : Take numbers from the ends [David Ginat, Tel-Aviv University]


WWW Maven: Dan Garcia (ddgarcia@cs.berkeley.edu) Send me feedback

Dan Garcia Berkeley Computer Science