Transcript Slide 1

Recursion
Recursion
You should be able to identify the base
case(s) and the general case in a
recursive definition
• To be able to write a recursive
algorithm for a problem involving only
simple variables.
A Recursive call
• A function call in which the function being
called is the same as the one making the
call.
• Put differently it is a function call to
itself.
• When a function calls itself this is said to
be a recursive call.
• The word recursive means: having the
characteristics of coming up again or
repeating.
• Can be used instead of iteration or looping
Efficiency considerations
• Recursive solutions are generally less
efficient than iterative solutions.
• Some problems that we will see lend
themselves to recursion
• Some languages do not allow recursion e.g.
Fortran, Basic and Cobol
• Lisp on the other hand is especially suited
for recursive algorithms
• Initially we will look at recursive algorithms
on simple variables we will then look at
recursion on structured data
What is recursion?
• The simplest use of the recursive
algorithm is to compute a number
raised to a given power, e.g. 2^3 is
2x2x2, 4^5 is 4x4x4x4x4 and so on.
• y^n, yxyxyxyxyxyx…. (n times)
• y^n is yxy^(n-1)
• y^n is yxyxy^(n-2)
• etc
The recursive definition
• This is the important bit.
• We can write x^n as x * x^(n-1). Hence
something is defined in terms of a smaller
version of itself
• Base case: the case for which the solution
can be stated non recursively
• General case: the case for which the
solution is expressed in terms of a smaller
version of itself
See program power.cpp
demo
• Run power.cpp
• See also power*.cpp in the cpteach directory included in
the week 8 directory
• See all Visual Basic illustrations in this directory go t
examples directory
Some comments on the
program
• Each recursive call to Power can be
thought of as creating its own copy of
the parameters x and n.
• x remains the same for each call but
the value of n decreases each time.
• Lets consider the case with number
=2 and exponent = 3, so we are
computing 2^3 which is 8
Tracing through the Power
program
•Call 1. Power is called by main, with number
equal to 2 and exponent equal to 3.
•Because n does not equal 1 Power is called
recursively with x and n-1as arguments.
•Call 2: x is equal to 2 and n is equal to 2.
Because n does not equal 1 the function Power is
called recursively.
•Call 3: x = 2 and n = 1. As n=1, the value of x is
returned. This call to the function has terminated
Infinite recursion
• If the function Power was called with n
negative then the condition n==1 would
never be satisfied since starting at a value
less than zero and continually subtracting
1 would mean that a value of 1 is never
obtained.
• I have altered this now so that negative
powers are calculated
Execution of Power(2,3)
Power(2,3)
Call 1
X=2, n=3
Call 2
X=2, n=2
Call 3
X=2, n=1
Recursive algorithms with
Simple Variables
• Lets look at a special mathematical
function important in so many areas
of mathematics. It is the factorial
function defined as
• n! = nx(n-1)x(n-2)x……1
• E.g. 4! = 4*3*2*1 = 24
Run Factorial demo
Factorial.cpp
Tracing through the Factorial
function
Call 1
n=4
Call 2
n=3
Call 3
n=2
Call 4
n=1
Call 5
n=0
Iterative solution
Writing the code without using recursion gives:
int Factorial(int n)
{
int factor;
int count;
Factor = 1;
for (count=2;count<=n;count++)
Factor=Factor*count;
return Factor;
}
The Towers of Hanoi
• Very old problem demonstrating
recursion.
• Only one disc can be moved at a time
• After each move, all discs must be on
the poles
• No disc may be placed on top of a
disc which is smaller than itself
Hanoi.cpp
• Discuss Hanoi.cpp and demonstrate