Recursion - PowerPoint PPT Presentation

About This Presentation
Title:

Recursion

Description:

Our choice is not if we should teach it, but how to teach it. Recursion is hard ... That kissed the maiden all forlorn, That milked the cow with the crumpled horn, ... – PowerPoint PPT presentation

Number of Views:353
Avg rating:3.0/5.0
Slides: 31
Provided by: jeffp50
Category:
Tags: maiden | recursion

less

Transcript and Presenter's Notes

Title: Recursion


1
Recursion
  • Jeff Parker, Merrimack College
  • CS2 _at_ Dennison, June 2008

In order to understand recursion you just need
to understand recursion.
2
Outline
  • Recursion is important
  • We use it to describe things (BNF)
  • Many algorithms are best expressed recursively
  • Our choice is not if we should teach it, but how
    to teach it
  • Recursion is hard
  • Our students don't understand it
  • Our students fear it
  • This talk hopes to provide
  • Review of the literature
  • More ideas than you can possibly use, and
  • A framework to work within

3
How to teach it
  • There are two theories on how to teach it
    Students should
  • Have a strong model of how it works, or
  • Have a template for how to use it, without
    worrying so much about how it works Long, Weide,
    Bucci
  • These are not as contradictory as they seem
  • Understanding how it works well enough to predict
    what a new example does is important
  • Understanding how it works does not help us solve
    new problems
  • We need both skills. But we need more

4
Framework for teaching
  • Motivation
  • As with any new notion, the student must have a
    reason to master the new idea.
  • Need a problem they cannot solve without
    recursion
  • Mental model of recursion
  • Must be strong enough to allow student to test
    alternatives.
  • Understanding of how to apply recursion
  • The mental model helps us simulate action of
    function.
  • Does not help us write the function in the first
    place.

5
Motivation
  • We want examples that grab the students
  • We don't have to explain in full detail
  • - that comes later
  • Look for examples in the following areas
  • Images
  • Language
  • Text pyramids, reverse ASCII "graphics"
  • Games and Puzzles
  • Avoid fib() and factorial()
  • Prefer power(base, exp)
  • As well as problems that recursion can help us
    solve, we explore the richness of recursion

6
Images
  • Images are excellent at capturing the idea
  • Some of the images are recursive by nature
  • Some are easy to describe recursively
  • Introducing APIs needed to write examples is
    barrier
  • If we are using these as motivation this isn't an
    issue
  • Some images are distracting
  • As much as we like them, they confuse our students

7
Dan Gries' Fractal Maker
  • A system that lets students play with different
    fractal images
  • Can select the depth of recursive calls
  • Has a nice library of examples
  • http//www.dangries.com/Flash/FractalMaker.html

8
Dolls
9
Images
10
Recursion in Language
  • Noam Chomsky believes that the ability to
    recursively extend a sentence is hardwired.
  • This is the man all tattered and torn,
  • That kissed the maiden all forlorn,
  • That milked the cow with the crumpled horn,
  • That tossed the dog, That worried the cat,
  • That killed the rat, That ate the malt
  • That lay in the house that Jack built.
  • Khad Gadya
  • One little goat that Father bought for two zuzim.
  • Daniel Everett has proposed the Pirahã language
    as a counter-example.

11
Recursion in Language
  • An interesting exercise in inductive reasoning is
    to discuss the statement
  • A King is a son of a King
  • Is this true? Why or why not?
  • George I ascended after James II was deposed.
  • Does this prove that Prince Charles can never
    take the throne?
  • If we assume it is true, what else can we say
    about Kings?

12
Other Motivating Examples
13
Student Mental Models
  • Kahney analyzed student mental models
  • Looping model Recursion as a form of iteration
  • Step Model just follow the program one step at
    a time
  • Return Value Model Assumes each call returns at
    once
  • Models in which Return returns to the main
  • Magic Model No Clue
  • Copies Model Distinct invocations of a routine
    (the only correct model)
  • Each Slugo is different
  • Since then, other models have been suggested.
  • Part of our task is to render other models
    untenable

14
Copies Model
  • George argues that to teach Copies model, we
    must
  • Show active flow of control (from caller to
    callee)
  • Show passive flow of control (callee returns to
    caller)
  • Understand the base case
  • We can explain all this with linear recursion
    (single call)
  • Pure Tail Recursion does not have observable
    passive flow
  • Embedded Recursion may

15
Print a String
You can observe a lot just by watching - Yogi
Berra
str
  • void print(string str)
  • if (str.length() gt 0)
  • char ch str.at(0)
  • string tail str.substr(1, str.length())
  • print(tail)
  • cout ltlt ch
  • Ford Call on students to act out roles
  • Each student has a different copy of this page
  • I think it is important to make tail explicit,
    rather than a function call
  • if (str.length() gt 0) ...
  • print(str.substr(1, str.length()))

ch
tail
print("STOP")
16
Reverse a String
str
  • To focus on passive flow, assemble work
  • In this function, we build a string
  • string reverse(string str)
  • if (str.length() 0)
  • return str
  • else
  • char ch str.at(0)
  • string tail str.substr(1, str.length())
  • return tail ch

ch
tail
reverse("STOP")
17
Teaching Models
  • Wu, Dale, and Bethel identify 5 teaching models
  • Three are concrete, two abstract
  • Russian Dolls - smaller versions of the original
    (recursive call) and a doll that you cannot open
    (base case)
  • Process Tracing Use call tree Kruse or
    activation trace Haynes
  • Stack Simulation Show the underlying computer
    architecture used
  • Mathematical Induction Mathematical examples
    and Proof by Induction
  • Structure template Sample solutions and a
    template that they can fill in
  • They believe that different students will prefer
    different approaches

18
Writing Recursive Routines
  • The third leg of the stool is to write recursive
    routines
  • When we present a recursive definition of the
    Factorial function, we have skipped the step that
    students find most difficult
  • When we teach functions, we teach students to
    understand what the client needs, and to write a
    provider to implement it.
  • Recursive routines are both client and provider
  • Long, Weide, Bucci Apply this to your problem
    of choice

19
Recursion in Text
  • CS1 Students were given problem to reverse the
    elements of DNS name
  • They had struggled to write an iterative solution

w
w
w
.
d
e
n
i
s
o
n
.
e
d
u
w
w
w
.
.
e
d
u
d
e
n
i
s
o
n
20
Reverse a string w/ three words
  • string reverse3word(string str)
  • stringsize_type pos str.find(.)
  • string word str.substr(pos1, str.length()
  • return reverse2word(word) . str.substr(0,
    pos)
  • Of course, this does not work if there are no
    dots.
  • Bullet-proof this with a check that pos is not
    negative

w
w
w
.
d
e
n
i
s
o
n
.
e
d
u
21
Reverse a string
  • string reverse3word(string str)
  • stringsize_type pos str.find(.)
  • if (stringnpos pos)
  • return str
  • else
  • string word str.substr(pos1, str.length()
  • return reverse2word(word) . str.substr(0,
    pos)
  • string reverse2word(string str)
  • stringsize_type pos str.find(.)
  • if (stringnpos pos)
  • return str
  • else
  • string word str.substr(pos1, str.length()
  • return reverse1word(word) . str.substr(0,
    pos)

22
Visualizing the Call Stack
We have two copies of Pow3 on the stack This one
has a value of n 6 The arrow in bottom panel
shows where the program is running
The debugger shows the stack, for those that
understand it
23
EROSI
  • While the debugger has all the information, we do
    not see the two calls to power as distinct
    objects
  • George proposed the EROSI (Explicit Representer
    of Subprogram Invocations) system that shows each
    invocation as a distinct object

int main() p power(2, 13)
power(2, 13) temp power(2,
13/2) return temp
power(2, 6) temp power(2, 6/2)
return temp
24
Tracing Calls Filling
  • Consider the task of filling a region

25
Call Tracking
25
  • Call trees are the gold standard Kruse
  • Creating them requires solid understanding
  • // Fill Boolean array image at point (row, col)
  • void fill(bool imageMAXMAX, int row, int col)
  • // Is the fill point within the graph?
  • if ((row lt 0) (row gt MAX) (col lt 0)
    (col gt MAX))
  • return
  • // Is the graph empty at the fill point?
  • if (imagerowcol)
  • return
  • // Turn on the point
  • imagerowcol true
  • // Try to fill in the surrounding area
  • fill(image, row-1, col, level 1)

26
Mechanical Call Tracking
26
  • Simplest mechanical aid is to print info as we
    enter function
  • Adding indenting to show stack depth Haynes
  • void fill(bool imageMAXMAX, int row, int col,
    int level)
  • cout ltlt indent(level) ltlt "fill(" ltlt row ltlt ", "
    ltlt col ltlt ")\n"
  • ...
  • // Fill in the surrounding area
  • fill(image, row-1, col, level 1)
  • fill(image, row1, col, level 1)
  • fill(image, row, col-1, level 1)
  • fill(image, row, col1, level 1)
  • fill(4, 4)
  • fill(3, 4)
  • fill(2, 4)
  • fill(1, 4)
  • fill(3, 4)

27
Mechanical Call Tracking
  • Here we track which call (first, second, third)
    filled each cell
  • void fill(bool imageMAXMAX, int row, int col,
    int cnt, int countMAXMAX)
  • // Is the fill point within the graph?
  • if ((row lt 0) (row gt MAX) (col lt 0)
    (col gt MAX))
  • return
  • // Is the graph empty at the fill point?
  • if (imagerowcol)
  • return
  • // Turn on the point
  • imagerowcol true
  • countrowcol cnt
  • // Try to fill in the surrounding area
  • fill(image, row-1, col, cnt, count)
  • fill(image, row1, col, cnt, count)

0 0 0 0 0 0 0 0 0 0 0 0 0 X X X
X 0 0 0 0 0 X X 3 4 X X 0 0 0 X
X 15 2 5 6 13 X 0 0 X 26 16 1 X 7 12
X 0 0 X 25 17 23 X 8 11 X 0 0 0 X 18
22 X 9 10 X 0 0 X 20 19 21 24 X 14 X 0
0 0 X X X X X X X 0 0 0 0 0 0 0
0 0 0 0
28
Dramatizations
  • Ben-Ari suggests that we dramatize recursion
  • He gives 3 examples. Each emphasizes the passive
    flow.
  • Open a present (Improvement on nested Matryoshka
    Dolls)
  • The receiver thanks the presenter to show passive
    flow
  • Build a chain of N links by adding a link on
    passive path
  • Count the nuts in a Chocolate Bar assemble count

29
Summary
  • Motivation
  • Give students a reason to master a new idea.
  • Mental model of the process
  • Provide a mental model that they can use
  • Reinforce with call tracing, call trees, etc.
  • Understanding of how to apply recursion
  • Use functional decomposition to break problem
    down
  • Templates may help should not be straight-jacket

30
Selected Sources
  • Ford A framework for teaching Recursion, SIGCSE
    Bulletin, 1982.
  • Kahney Modelling novice programmer behaviour.
    In New horizons in educational computing,1984.
  • Haynes Explaining Recursion to the
    Unsophisticated, SIGCSE Bulletin, September 1995
  • Ben-Ari Recursion From Drama to Program,
    Journal of Computer Science Education, 11(3),
    1997
  • Wu, Dale, Bethel Conceptual Models and
    Cognitive Learning Styles. SIGCSE 98
  • Long, Weide, Bucci ClientView First An Exodus
    From Implementation-Biased Teaching, SIGCSE 1999
  • George EROSI Visualizing Recursion and
    Discovering New Errors, SIGCSE 2000
Write a Comment
User Comments (0)
About PowerShow.com