C users_mpk7_app_data_local_temp_plugtmp_plugin-week3recursive
1.
1
Recursive
Data Structure & Algorithm
7/20/2009
Part II
Prepared by
Nor Bahiah Hj Ahmad
2.
2
7/20/2009
Objectives
At the end of the class students should be able to:
• Identify problem solving characterestics using
recursive.
• Trace the implementation of recursive function.
• Write recursive function in solving a problem
3.
3
7/20/2009
Introduction
• Repetitive algorithm is a process wherby a
sequence of operations is executed repeatedly
until certain condition is achieved.
• Repetition can be implemented using loop :
while, for or do..while.
• Besides repetition using loop, C++ allow
programmers to implement recursive.
• Recursive is a repetitive process in which an
algorithm calls itself.
4.
4
7/20/2009
Introduction
• Recursion can be used to replace loops.
• Recursively defined data structures, like lists, are
very well-suited to processing by recursive
procedures and functions
• A recursive procedure is mathematically more
elegant than one using loops.
• Sometimes procedures that would be tricky to
write using a loop are straightforward using
recursion.
5.
5
7/20/2009
Introduction
• Recursive is a powerful problem solving
approach, since problem solving can be
expressed in an easier and neat approach.
• Drawback : Execution running time for recursive
function is not efficient compared to loop, since
every time a recursive function calls itself, it
requires multiple memory to store the internal
address of the function.
6.
6
7/20/2009
Recursive solution
• Not all problem can be solved using recursive.
• Problem that can be solved using recursive is a
problem that can be solved by breaking the
problem into smaller instances of problem, solve
& combine
7.
7
7/20/2009
Understanding recursion
Every recursive definition has 2 parts:
• BASE CASE(S): case(s) so simple that they can
be solved directly
• RECURSIVE CASE(S): more complex – make
use of recursion to solve smaller subproblems &
combine into a solution to the larger problem
8.
8
7/20/2009
Rules for Designing Recursive
Algorithm
1.Determine the base case - There is one or more
terminal cases whereby the problem will be
solved without calling the recursive function
again.
2.Determine the general case – recursive call by
reducing the size of the problem
3.Combine the base case and general case into an
algorithm
9.
9
7/20/2009
Designing Recursive Algorithm
• Recursive algorithm.
if (terminal case is reached) // base case
<solve the problem> Base case
and general
else // general case case is
< reduce the size of the problem and combined
call recursive function >
11
7/20/2009
Multiply 2 numbers using Addition
Method
• Multiplication of 2 numbers can be achieved by
using addition method.
• Example :
To multiply 8 x 3, the result can also be achieved
by adding value 8, 3 times as follows:
8 + 8 + 8 = 24
12.
12
7/20/2009
Implementation of Multiply()
using loop
int Multiply(int M,int N)
{ for (int i=1,i<=N,i++)
result += M;
return result;
}//end Multiply()
13.
13
7/20/2009
Solving Multiply problem recursively
Steps to solve Multiply() problem recursively:
• Problem size is represented by variable N. In this
example, problem size is 3. Recursive function will
call Multiply() repeatedly by reducing N by 1 for
each respective call.
• Terminal case is achieved when the value of N is 1
and recursive call will stop. At this moment, the
solution for the terminal case will be computed and
the result is returned to the called function.
• The simple solution for this example is represented
by variable M. In this example, the value of M is 8.
14.
14
7/20/2009
Implementation of recursive
function: Multiply()
int Multiply (int M,int N)
{
if (N==1)
return M;
else
return M + Multiply(M,N-1);
}//end Multiply()
15.
15
7/20/2009
Recursive algorithm
3 important factors for recursive
implementation:
• There’s a condition where the function will stop
calling itself. (if this condition is not fulfilled,
infinite loop will occur)
• Each recursive function call, must return to the
called function.
• Variable used as condition to stop the recursive
call must change towards terminal case.
16.
16
7/20/2009
Tracing Recursive Implementation for Multiply().
19
7/20/2009
Factorial Problem
• Problem : Get Factorial value for a positive
integer number.
• Solution : The factorial value can be achieved as
follows:
0! is equal to 1
1! is equal to 1 x 0! = 1 x 1 = 1
2! is equal to 2 x 1! = 2 x 1 x 1 = 2
3! is equal to 3 x 2! = 3 x 2 x 1 x 1 = 6
4! is equal to 4 x 3! = 4 x 3 x 2 x 1 x 1 = 24
N! is equal to N x (N-1)! For every N>0
20.
20
7/20/2009
Solving Factorial Recursively
1. The simple solution for this example is
represented by the factorial value equal to 1.
2. N, represent the factorial size. The recursive
process will call factorial() function recursively
by reducing N by 1.
3. Terminal case for factorial problem is when N
equal to 0. The computed result is returned to
called function.
21.
21
7/20/2009
Factorial function
Here’s a function that computes the factorial of a number N
without using a loop.
• It checks whether N is equal 0. If so, the function just return 1.
• Otherwise, it computes the factorial of (N – 1) and multiplies
it by N.
int Factorial (int N )
{ /*start Factorial*/
if (N==0)
return 1;
else
return N * Factorial (N-1);
} /*end Factorial
25
7/20/2009
Fibonacci Problem
• Problem : Get Fibonacci series for an integer
positive.
• Fibonacci Siries : 0, 1, 1, 2, 3, 5, 8, 13, 21,…..
• Starting from 0 and and have features that every
Fibonacci series ia the result of adding 2 previous
Fibonacci numbers.
• Solution: Fibonacci value of a number can be computed
as follows:
Fibonacci ( 0) = 0
Fibonacci ( 1) = 1
Fibonacci ( 2) = 1
Fibonacci ( 3) = 2
Fibonacci ( N) = Fibonacci (N-1) + Fibonacci (N-2)
26.
26
7/20/2009
Solving Fibonacci Recursively
1. The simple solution for this example is
represented by the Fibonacci value equal to 1.
2. N, represent the series in the Fibonacci
number. The recursive process will integrate
the call of two Fibonacci () function.
3. Terminal case for Fibonacci problem is when N
equal to 0 or N equal to 1. The computed
result is returned to the called function.
27.
27
7/20/2009
Fibonacci() function
int Fibonacci (int N )
{ /* start Fibonacci*/
if (N<=0)
return 0;
else if (N==1)
return 1;
else
return Fibonacci(N-1) + Fibonacci (N-2);
}
28.
28
7/20/2009
Implementation of Fibonacci() :
passing and returning value from
function.
29.
Exercise Week 3_1
•Refer to Exercise 1 No. 4.iii. in pg. 4.
• Solve the problem.
• Refer to Exercise 2 No. 1 in pg. 4.
• Solve the problem.
30.
30
7/20/2009
Infinite Recursive
• Avoiding infinite(?) recursion
• to avoid infinite recursion:
▫ must have at least 1 base case (to terminate the
recursive sequence)
▫ each recursive call must get closer to a base case
31.
31
7/20/2009
Infinite Recursive : Example
#include <stdio.h>
#include <conio.h>
void printIntegesr(int n);
main()
{ int number;
cout<<“nEnter an integer value :”;
cin >> number;
printIntegers(number); 1. No condition
} satatement to
void printIntegers (int nom) stop the
{ cout << “Value : “ << nom; recursive call.
printIntegers (nom); 2. Terminal case
} variable does
not change.
32.
32
7/20/2009
Improved Recursive function
#include <stdio.h>
#include <conio.h> Exercise: Give the
output if the value
void printIntegers(int n); entered is 10 or 7.
main()
{ int number;
cout<<“nEnter an integer value :”;
cin >> number;
printIntegers(number);
} condition satatement
void printIntegers (int nom) to stop the recursive
{ if (nom >= 1) call and the changes
cout << “Value : “ << nom;
in the terminal case
printIntegers (nom-2);
variable are
}
provided.
34
7/20/2009
Conclusion and Summary
• Recursive is a repetitive process in which an
algorithm calls itself.
• Problem that can be solved using recursive is a
problem that can be solved by breaking the problem
into smaller instances of problem, solve & combine
• Every recursive definition has 2 parts:
▫ BASE CASE: case that can be solved directly
▫ RECURSIVE CASE: use recursion to solve smaller
subproblems & combine into a solution to the larger
problem
35.
35
7/20/2009
References
1. Nor Bahiah et al. Struktur data & algoritma
menggunakan C++. Penerbit UTM, 2005
2. Richrd F. Gilberg and Behrouz A. Forouzan,
“Data Structures A Pseudocode Approach
With C++”, Brooks/Cole Thomson Learning,
2001.