chapter-6-recursion

advertisement
1
CS212: DATASTRUCTURES
Lecture 3: Recursion
Lecture Contents
2






The Concept of Recursion
Why recursion?
Factorial – A case study
Content of a Recursive Method
Recursion vs. iteration
Simple Example
The Concept of Recursion
3


A recursive function is a function that calls itself , either directly or indirectly
( through another function).
For example :
void myFunction( int counter)
{
if(counter == 0)
return;
else
{
cout <<counter<<endl;
myFunction(--counter);
return;
}
}
Why recursion?
4



Sometimes, the best way to solve a problem is by
solving a smaller version of the exact same problem
first
Recursion is a technique that solves a problem by
solving a smaller problem of the same type
Allows very simple programs for very complex
problems
Factorial – A case study
5

Factorial definition: the factorial of a number is
product of the integral values from 1 to the number.
factorial 3
=
3*2*1
=
6
Factorial – A case study
6

Iteration algorithm definition (non-recursive)
1
if n = 0
n*(n-1)*(n-2)*…*3*2*1
if n > 0
Factorial(n) =
factorial 4
=
product [4..1]
=
product [4,3,2,1]
=
4*3*2*1
=
24
Factorial – A case study
7

Recursion algorithm definition
1
if n = 0
n * ( Factorial(n-1) )
if n > 0
Factorial(n) =
=
factorial 3
=
3 * factorial 2
=
3 * (2 * factorial 1)
=
3 * (2 * (1 * factorial 0))
=
3 * (2 * (1 * 1))
=
3 * (2 * 1)
=
3 * 2
76
Recursive Computation of n!
8
Recursive Computation of n!
9
10
Content of a Recursive Method
11
Base case(s).
 One or more stopping conditions that can be directly evaluated for certain

arguments
 there should be at least one base case.

Recursive calls.
Recursive calls
Base case
 One or more recursive steps, in which a current value of the method can be
computed by repeated calling of the method with arguments (general
case).
 The recursive procedure call must use a different argument that the original
one: otherwise the procedure would always get into an infinite loop…
Content of a Recursive Method
12
Use an if-else statement to
distinguish between a Base case
and a recursive step
void myFunction( int counter)
{
if(counter == 0)
return ;
else
{
cout <<counter<<endl;
myFunction(--counter);
return;
}
}
Iterative factorial algorithm
Recursive factorial Algorithm
Algorithm iterativeFactorial (val n
<integer>)
Calculates the factorial of a number using
a loop.
Pre n is the number to be raised
factorially
Return n! is returned
Algorithm recursiveFactorial (val n
<integer>)
Calculates the factorial of a number using
recursion
Pre
n is the number to be raised
factorially
Return n! is returned
13
1 i=1
2 factN = 1
3 loop (i <= n)
1 factN = factN * i
2 i=i+1
4 end loop
5 return factN
end iterativeFactorial
1 if (n equal 0)
1 return 1
2 else
1 return (n * recursiveFactorial(n - 1))
3 end if
end recursiveFactorial
Tracing Recursive Method
14
recursiveFactorial (4)
Each recursive call is made
with a new, independent set of
arguments Previous calls are
suspended
Recursion vs. iteration
15



Iteration can be used in place of recursion
 An iterative algorithm uses a looping construct
 A recursive algorithm uses a branching structure
Recursive solutions are often less efficient, in terms
of both time and space, than iterative solutions
Recursion can simplify the solution of a problem,
often resulting in shorter, more easily understood
source code
A Simple Example of Recursion
16
Algorithm LinearSum(A <integer>, n
<integer>)
pre
A integer array A and an integer n,
such that A has at least n elements
post
The sum of the first n integers in A
if n = 1 then
sum= A[0]
else
sum= LinearSum(A, n - 1) + A[n - 1]
End IF
Return sum
end LinearSum
call
LinearSum
return
15 + A [4 ] = 15 + 5 = 20
( A ,5 )
call
LinearSum
return
13 + A [3 ] = 13 + 2 = 15
(A ,4 )
call
LinearSum
return
7 + A [2 ] = 7 + 6 = 13
(A ,3 )
call
LinearSum
return
(A ,2 )
call
LinearSum
4 + A [1 ] = 4 + 3 = 7
(A , 1 )
return
A [0 ] = 4
17
End Of Chapter
References:
•
Text book, chapter6: Recursion
Download