Recursion Dr Nguyen Ho Man Rang Recursion and the basic components of recursive algorithms Properties of recursion Designing recursive algorithms Recursion and backtracking Recursion implementation in[.]
Trang 1Dr Nguyen HoMan Rang
Recursion and thebasic components
of recursivealgorithmsProperties ofrecursionDesigning recursivealgorithmsRecursion andbacktrackingRecursionimplementation inC/C++
3.1
Chapter 3
Recursion
Data Structures and Algorithms
Dr Nguyen Ho Man Rang Faculty of Computer Science and Engineering
University of Technology, VNU-HCM
Trang 2Dr Nguyen HoMan Rang
Recursion and thebasic components
of recursivealgorithmsProperties ofrecursionDesigning recursivealgorithmsRecursion andbacktrackingRecursionimplementation inC/C++
Outcomes
• L.O.8.1 - Describe the basic components of recursive
algorithms (functions).
• L.O.8.2 - Draw trees to illustrate callings and the value
of parameters passed to them for recursive algorithms.
• L.O.8.3 - Give examples for recursive functions written
in C/C++.
• L.O.8.5 - Develop experiment (program) to compare
the recursive and the iterative approach.
• L.O.8.6 - Give examples to relate recursion to
backtracking technique.
Trang 3Dr Nguyen HoMan Rang
Recursion and thebasic components
of recursivealgorithmsProperties ofrecursionDesigning recursivealgorithmsRecursion andbacktrackingRecursionimplementation inC/C++
3 Designing recursive algorithms
4 Recursion and backtracking
5 Recursion implementation in C/C++
Trang 4Dr Nguyen HoMan Rang
Recursion and thebasic components
of recursivealgorithmsProperties ofrecursionDesigning recursivealgorithmsRecursion andbacktrackingRecursionimplementation inC/C++
Recursion and the basic
components of recursive
algorithms
Trang 5Dr Nguyen HoMan Rang
Recursion and thebasic components
of recursivealgorithmsProperties ofrecursionDesigning recursivealgorithmsRecursion andbacktrackingRecursionimplementation inC/C++
F actorial(n) =
"
n × F actorial(n − 1) if n > 0
Trang 6Dr Nguyen HoMan Rang
Recursion and thebasic components
of recursivealgorithmsProperties ofrecursionDesigning recursivealgorithmsRecursion andbacktrackingRecursionimplementation inC/C++
Basic components of recursive algorithms
Two main components of a Recursive Algorithm
Trang 7Dr Nguyen HoMan Rang
Recursion and thebasic components
of recursivealgorithmsProperties ofrecursionDesigning recursivealgorithmsRecursion andbacktrackingRecursionimplementation inC/C++
3.7
Recursion
Factorial (3) Recursively (source: Data Structure - A pseudocode
Approach with C++)
Trang 8Dr Nguyen HoMan Rang
Recursion and thebasic components
of recursivealgorithmsProperties ofrecursionDesigning recursivealgorithmsRecursion andbacktrackingRecursionimplementation inC/C++
Recursion
Factorial: Iterative Solution
Algorithm iterativeFactorial(n)
Calculates the factorial of a number using a loop.
Pre: n is the number to be raised factorially
Post: n! is returned - result in factoN
Trang 9Dr Nguyen HoMan Rang
Recursion and thebasic components
of recursivealgorithmsProperties ofrecursionDesigning recursivealgorithmsRecursion andbacktrackingRecursionimplementation inC/C++
3.9
Recursion
Factorial: Recursive Solution
Algorithm recursiveFactorial(n)
Calculates the factorial of a number using a recursion.
Pre: n is the number to be raised factorially
Trang 10Dr Nguyen HoMan Rang
Recursion and thebasic components
of recursivealgorithmsProperties ofrecursionDesigning recursivealgorithmsRecursion andbacktrackingRecursionimplementation inC/C++
Recursion
Trang 11Dr Nguyen HoMan Rang
Recursion and thebasic components
of recursivealgorithmsProperties ofrecursionDesigning recursivealgorithmsRecursion andbacktrackingRecursionimplementation inC/C++
3.11
Properties of recursion
Trang 12Dr Nguyen HoMan Rang
Recursion and thebasic components
of recursivealgorithmsProperties ofrecursionDesigning recursivealgorithmsRecursion andbacktrackingRecursionimplementation inC/C++
Properties of all recursive algorithms
problem by using its solution to a simpler
sub-problem
enough that it can be solved without
applying the algorithm to it recursively.
Trang 13Dr Nguyen HoMan Rang
Recursion and thebasic components
of recursivealgorithmsProperties ofrecursionDesigning recursivealgorithmsRecursion andbacktrackingRecursionimplementation inC/C++
3.13
Designing recursive
algorithms
Trang 14Dr Nguyen HoMan Rang
Recursion and thebasic components
of recursivealgorithmsProperties ofrecursionDesigning recursivealgorithmsRecursion andbacktrackingRecursionimplementation inC/C++
The Design Methodology
Rules for designing a recursive algorithm
case)
3 Combine the base case and the general
cases into an algorithm.
Trang 15Dr Nguyen HoMan Rang
Recursion and thebasic components
of recursivealgorithmsProperties ofrecursionDesigning recursivealgorithmsRecursion andbacktrackingRecursionimplementation inC/C++
3.15
Limitations of Recursion
slowly than its nonrecursive
implementation.
more understandable.
Trang 16Dr Nguyen HoMan Rang
Recursion and thebasic components
of recursivealgorithmsProperties ofrecursionDesigning recursivealgorithmsRecursion andbacktrackingRecursionimplementation inC/C++
Print List in Reverse
Trang 17Dr Nguyen HoMan Rang
Recursion and thebasic components
of recursivealgorithmsProperties ofrecursionDesigning recursivealgorithmsRecursion andbacktrackingRecursionimplementation inC/C++
3.17
Print List in Reverse
Trang 18Dr Nguyen HoMan Rang
Recursion and thebasic components
of recursivealgorithmsProperties ofrecursionDesigning recursivealgorithmsRecursion andbacktrackingRecursionimplementation inC/C++
Print List in Reverse
Algorithm printReverse(list)
Prints a linked list in reverse.
Pre: list has been built
Post: list printed in reverse
if list is null then
return
end
printReverse (list -> next)
print (list -> data)
End printReverse
Trang 19Dr Nguyen HoMan Rang
Recursion and thebasic components
of recursivealgorithmsProperties ofrecursionDesigning recursivealgorithmsRecursion andbacktrackingRecursionimplementation inC/C++
Trang 20Dr Nguyen HoMan Rang
Recursion and thebasic components
of recursivealgorithmsProperties ofrecursionDesigning recursivealgorithmsRecursion andbacktrackingRecursionimplementation inC/C++
Greatest Common Divisor
Algorithm gcd(a, b)
Calculates greatest common divisor using the Euclidean
algorithm.
Pre: a and b are integers
Post: greatest common divisor returned
Trang 21Dr Nguyen HoMan Rang
Recursion and thebasic components
of recursivealgorithmsProperties ofrecursionDesigning recursivealgorithmsRecursion andbacktrackingRecursionimplementation inC/C++
Trang 22Dr Nguyen HoMan Rang
Recursion and thebasic components
of recursivealgorithmsProperties ofrecursionDesigning recursivealgorithmsRecursion andbacktrackingRecursionimplementation inC/C++
+
Trang 23Dr Nguyen HoMan Rang
Recursion and thebasic components
of recursivealgorithmsProperties ofrecursionDesigning recursivealgorithmsRecursion andbacktrackingRecursionimplementation inC/C++
1 2
3
Result
0, 1, 1, 2, 3, 5, 8, 13, 21, 34,
Trang 24Dr Nguyen HoMan Rang
Recursion and thebasic components
of recursivealgorithmsProperties ofrecursionDesigning recursivealgorithmsRecursion andbacktrackingRecursionimplementation inC/C++
Fibonacci Numbers
Algorithm Fibo(n)
Calculates the n th Fibonacci number.
Pre: n is postive integer
Post: the n th Fibonnacci number returned
Trang 25Dr Nguyen HoMan Rang
Recursion and thebasic components
of recursivealgorithmsProperties ofrecursionDesigning recursivealgorithmsRecursion andbacktrackingRecursionimplementation inC/C++
Trang 26Dr Nguyen HoMan Rang
Recursion and thebasic components
of recursivealgorithmsProperties ofrecursionDesigning recursivealgorithmsRecursion andbacktrackingRecursionimplementation inC/C++
The Towers of Hanoi
Move disks from Source to Destination using Auxiliary:
1 Only one disk could be moved at a time.
2 A larger disk must never be stacked above a smaller one.
3 Only one auxiliary needle could be used for the
intermediate storage of disks.
3
2
1
Trang 27Dr Nguyen HoMan Rang
Recursion and thebasic components
of recursivealgorithmsProperties ofrecursionDesigning recursivealgorithmsRecursion andbacktrackingRecursionimplementation inC/C++
Trang 28Dr Nguyen HoMan Rang
Recursion and thebasic components
of recursivealgorithmsProperties ofrecursionDesigning recursivealgorithmsRecursion andbacktrackingRecursionimplementation inC/C++
The Towers of Hanoi
Moved disc from pole 1 to pole 2.
Trang 29Dr Nguyen HoMan Rang
Recursion and thebasic components
of recursivealgorithmsProperties ofrecursionDesigning recursivealgorithmsRecursion andbacktrackingRecursionimplementation inC/C++
Destination Moved disc from pole 3 to pole 2.
Trang 30Dr Nguyen HoMan Rang
Recursion and thebasic components
of recursivealgorithmsProperties ofrecursionDesigning recursivealgorithmsRecursion andbacktrackingRecursionimplementation inC/C++
The Towers of Hanoi
2 1
Destination 3
Moved disc from pole 1 to pole 3.
Trang 31Dr Nguyen HoMan Rang
Recursion and thebasic components
of recursivealgorithmsProperties ofrecursionDesigning recursivealgorithmsRecursion andbacktrackingRecursionimplementation inC/C++
Moved disc from pole 2 to pole 1.
Trang 32Dr Nguyen HoMan Rang
Recursion and thebasic components
of recursivealgorithmsProperties ofrecursionDesigning recursivealgorithmsRecursion andbacktrackingRecursionimplementation inC/C++
The Towers of Hanoi
Source
1
3 2
Moved disc from pole 2 to pole 3.
Trang 33Dr Nguyen HoMan Rang
Recursion and thebasic components
of recursivealgorithmsProperties ofrecursionDesigning recursivealgorithmsRecursion andbacktrackingRecursionimplementation inC/C++
3.33
The Towers of Hanoi
3 2 1
Moved disc from pole 1 to pole 3.
Trang 34Dr Nguyen HoMan Rang
Recursion and thebasic components
of recursivealgorithmsProperties ofrecursionDesigning recursivealgorithmsRecursion andbacktrackingRecursionimplementation inC/C++
The Towers of Hanoi
Trang 35Dr Nguyen HoMan Rang
Recursion and thebasic components
of recursivealgorithmsProperties ofrecursionDesigning recursivealgorithmsRecursion andbacktrackingRecursionimplementation inC/C++
Trang 36Dr Nguyen HoMan Rang
Recursion and thebasic components
of recursivealgorithmsProperties ofrecursionDesigning recursivealgorithmsRecursion andbacktrackingRecursionimplementation inC/C++
The Towers of Hanoi
Trang 37Dr Nguyen HoMan Rang
Recursion and thebasic components
of recursivealgorithmsProperties ofrecursionDesigning recursivealgorithmsRecursion andbacktrackingRecursionimplementation inC/C++
3.37
The Towers of Hanoi
Algorithm move(val disks <integer>, val source
<character>, val destination <character>, val auxiliary
<character>)
Move disks from source to destination.
Pre: disks is the number of disks to be moved
Post: steps for moves printed
print("Towers: ", disks, source, destination, auxiliary)
if disks = 1 then
print ("Move from", source, "to", destination)
else
move(disks - 1, source, auxiliary, destination)
move(1, source, destination, auxiliary)
move(disks - 1, auxiliary, destination, source)
end
return
End move
Trang 38Dr Nguyen HoMan Rang
Recursion and thebasic components
of recursivealgorithmsProperties ofrecursionDesigning recursivealgorithmsRecursion andbacktrackingRecursionimplementation inC/C++
Recursion and
backtracking
Trang 39Dr Nguyen HoMan Rang
Recursion and thebasic components
of recursivealgorithmsProperties ofrecursionDesigning recursivealgorithmsRecursion andbacktrackingRecursionimplementation inC/C++
Trang 40Dr Nguyen HoMan Rang
Recursion and thebasic components
of recursivealgorithmsProperties ofrecursionDesigning recursivealgorithmsRecursion andbacktrackingRecursionimplementation inC/C++
Eight Queens Problem
Place eight queens on the chess board in such a way that no
queen can capture another.
Trang 41Dr Nguyen HoMan Rang
Recursion and thebasic components
of recursivealgorithmsProperties ofrecursionDesigning recursivealgorithmsRecursion andbacktrackingRecursionimplementation inC/C++
3.41
Eight Queens Problem
Algorithm putQueen(ref board <array>,
r is the row to place queens onwards
Post: all the remaining queens are safely
placed on the board; or backtracking to
the previous rows is required
Trang 42Dr Nguyen HoMan Rang
Recursion and thebasic components
of recursivealgorithmsProperties ofrecursionDesigning recursivealgorithmsRecursion andbacktrackingRecursionimplementation inC/C++
Eight Queens Problem
for every column c on the same row r do
if cell r,c is safe then
place the next queen in cell r,c
if r < n-1 then
putQueen (board, r + 1) else
output successful placement end
remove the queen from cell r,c
end
end
Trang 43Dr Nguyen HoMan Rang
Recursion and thebasic components
of recursivealgorithmsProperties ofrecursionDesigning recursivealgorithmsRecursion andbacktrackingRecursionimplementation inC/C++
3.43
Eight Queens Problem
Trang 44Dr Nguyen HoMan Rang
Recursion and thebasic components
of recursivealgorithmsProperties ofrecursionDesigning recursivealgorithmsRecursion andbacktrackingRecursionimplementation inC/C++
Recursion
implementation in
C/C++
Trang 45Dr Nguyen HoMan Rang
Recursion and thebasic components
of recursivealgorithmsProperties ofrecursionDesigning recursivealgorithmsRecursion andbacktrackingRecursionimplementation inC/C++
Trang 46Dr Nguyen HoMan Rang
Recursion and thebasic components
of recursivealgorithmsProperties ofrecursionDesigning recursivealgorithmsRecursion andbacktrackingRecursionimplementation inC/C++
The Towers of Hanoi
Trang 47Dr Nguyen HoMan Rang
Recursion and thebasic components
of recursivealgorithmsProperties ofrecursionDesigning recursivealgorithmsRecursion andbacktrackingRecursionimplementation inC/C++