Lecture 16 - March 15, 2007
Recursion:
“A definition in which the
item being defined appears as part of the definition is called in inductive definition or a recursive
definition…This works because there are two parts to a recursive
definition:
1.
A basis, where
some simple cases of the item being defined are explicitly given
2.
An inductive or
recursive step, where new cases of the item being defined are given in terms of
previous cases.” [1]
Examples:
A sequence S is a list of
objects that are enumerated in some order; there is a first such object, then a
second, and so on. S(k) denotes the kth object in the sequence.
A sequence is defined recursively by explicitly naming the first value
(or the first few values) in the sequence and then defining later values in the
sequence in terms of early values.
The sequence S is defined
recursively by
1.
S(1) = 2
2.
S(n) = 2*S(n – 1) for n >= 2
A rule like that of statement 2 above, which
defines a sequence value in terms of one or more earlier values, is called a recurrence
relation.
Here’s another: The sequence T is defined recursively as
follows:
1.
T(1) = 1
2.
T(n) = T(n – 1) + 3 for n >= 2
Here’s another: The famous Fibonnaci sequence of numbers, introduced in the 13th
century by an Italian merchant and mathematician, is defined recursively by
F(1) = 1
F(2) = 1
F(n) = F(n – 2)
+ F(n – 1) for n > 2
Here’s another: Certain strings of statement letters,
logical connectives, and parentheses such as
(A ^ B)’ V C, are considered legitimate, while other strings such as
^^A’’B, are not legitimate. Here is a
recursive definition of a well formed
formula (wff).
1.
Any statement
letter is a wff
2.
If P and Q are
wffs, so are (P ^ Q), (P v Q), (P -> Q) , (P’), and (P <-> Q)
Here’s
another: A recursive definition for the
set of people who are ancestors of James could have the following basis:
James’s parents are ancestors of James
What
is the inductive step?
Here’s another: The set of all (finite-length ) strings of
symbols over a finite alphabet A is denoted by A*. The recursive definition of A* is
1.
The empty string l (string with no symbols) belongs to A*
2.
Any single member
of A belongs to A*
3.
If x and y are strings in A*, so is xy, the concatenation of strings x and y.
Here’s another In a given programming language, identifiers
can be alphanumeric strings of arbitrary length but must begin with a
letter. A recursive definition for the
set of such strings is
1.
A single letter
is an identifier.
2.
If A is an
identifier, so is the concatenation of A and any letter or digit.
A more symbolic notation for
describing sets of strings that are recursively defined is called Backus-Naur form or BNF, which was originally developed by
John Backus and Peter Naur to define the programming language ALGOL. to be discussed next class
General Characteristics of
Recursive methods
·
Recursive methods
get their solutions by calling themselves.
·
They have what is
known as a stopping case which keeps them from calling themselves forever.
·
They call
themselves with a smaller problem each time.
Most common problem:
·
Infinite
recursion
·
Caused by
o
Omitting stopping
case
o
Not having
successive cases getting smaller
TriangleArea
PlayWithTriangle.java
Triangle.java
.Dr Bernstein’s notes
https://users.cs.jmu.edu/bernstdh/web/common/lectures/slides_recursion.php
Link to BigJava materials
Website for BigJava text 2nd edition http://www.wiley.com/college/horstmann chapter 18
[1] Gersting, Judith L., Mathematical Structures for Computer Science, Fifth Edition, Freeman, 2003, pp. 120-1