University of California, Berkeley
EECS Department - Computer Science Division

CS3L OaW Lecture 6 : Recursion and Patterns

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


Review : Recursion!

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

Announcements

Common Confusions

Recursion and Patterns

Overview

Recursive patterns we'll see on sentences

Mapping Example : square-all

;; square-all
;;
;; INPUTS       : A sentence, s
;; REQUIRES     : The sentence contain only 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 s)
==>
==>
==>
: (square-all '())
==>

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

Finding Example : member-even

;; member-even
;;
;; INPUTS       : A sentence, s
;; REQUIRES     : The sentence contain only 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 s)
==>
==>
==>
: (member-even '())
==>

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

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

Counting Example : count-evens

;; count-evens
;;
;; INPUTS       : A sentence, s
;; REQUIRES     : The sentence contain only 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 s)
==>
==>
==>
==>
: (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, s
;; REQUIRES     : The sentence contain only 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 s)
==>
==>
==>
==>
==>
: (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?
;;
;; INPUTS       : A sentence, s
;; REQUIRES     : The sentence contain only numbers
;; SIDE-EFFECTS : None
;; RETURNS      : #t if the entire sentence is even, #f otherwise
;;              : This can also be thought of as (not (any-odds? s))
;; 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? s)
==>
==>
==>
==>
: (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, s
;; REQUIRES     : The sentence contain only numbers
;;              : The sentence have length at least one 
;;              : (because the min of nothing is undefined)
;; SIDE-EFFECTS : None
;; RETURNS      : The minimum number in the sentence
;; EXAMPLE      : (get-min '(795))     ==> 795
;;              : (get-min '(3 1 4 1)) ==> 1

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

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

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


Summary

In Lab this week you'll see...

In Life this week you'll see...