# Recursion - PowerPoint PPT Presentation

PPT – Recursion PowerPoint presentation | free to download - id: 1be729-ZDc1Z

The Adobe Flash plugin is needed to view this content

Get the plugin now

View by Category
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:61
Avg rating:3.0/5.0
Slides: 31
Provided by: jeffp50
Category:
Tags:
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.
• 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

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
• 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
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