1. Trang chủ
  2. » Tất cả

Đề thi cấu trúc dữ liệu và giải thuật dsa ch3 recursion (2)

47 2 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Recursion in Data Structures and Algorithms
Người hướng dẫn Dr. Nguyễn Ho Man Rang
Trường học University of Technology, VNU-HCM
Chuyên ngành Data Structures and Algorithms
Thể loại lecture notes
Định dạng
Số trang 47
Dung lượng 609,84 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

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 1

Dr 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 2

Dr 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 3

Dr 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 4

Dr Nguyen HoMan Rang

Recursion and thebasic components

of recursivealgorithmsProperties ofrecursionDesigning recursivealgorithmsRecursion andbacktrackingRecursionimplementation inC/C++

Recursion and the basic

components of recursive

algorithms

Trang 5

Dr 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 6

Dr 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 7

Dr 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 8

Dr 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 9

Dr 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 10

Dr Nguyen HoMan Rang

Recursion and thebasic components

of recursivealgorithmsProperties ofrecursionDesigning recursivealgorithmsRecursion andbacktrackingRecursionimplementation inC/C++

Recursion

Trang 11

Dr Nguyen HoMan Rang

Recursion and thebasic components

of recursivealgorithmsProperties ofrecursionDesigning recursivealgorithmsRecursion andbacktrackingRecursionimplementation inC/C++

3.11

Properties of recursion

Trang 12

Dr 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 13

Dr Nguyen HoMan Rang

Recursion and thebasic components

of recursivealgorithmsProperties ofrecursionDesigning recursivealgorithmsRecursion andbacktrackingRecursionimplementation inC/C++

3.13

Designing recursive

algorithms

Trang 14

Dr 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 15

Dr 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 16

Dr Nguyen HoMan Rang

Recursion and thebasic components

of recursivealgorithmsProperties ofrecursionDesigning recursivealgorithmsRecursion andbacktrackingRecursionimplementation inC/C++

Print List in Reverse

Trang 17

Dr Nguyen HoMan Rang

Recursion and thebasic components

of recursivealgorithmsProperties ofrecursionDesigning recursivealgorithmsRecursion andbacktrackingRecursionimplementation inC/C++

3.17

Print List in Reverse

Trang 18

Dr 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 19

Dr Nguyen HoMan Rang

Recursion and thebasic components

of recursivealgorithmsProperties ofrecursionDesigning recursivealgorithmsRecursion andbacktrackingRecursionimplementation inC/C++

Trang 20

Dr 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 21

Dr Nguyen HoMan Rang

Recursion and thebasic components

of recursivealgorithmsProperties ofrecursionDesigning recursivealgorithmsRecursion andbacktrackingRecursionimplementation inC/C++

Trang 22

Dr Nguyen HoMan Rang

Recursion and thebasic components

of recursivealgorithmsProperties ofrecursionDesigning recursivealgorithmsRecursion andbacktrackingRecursionimplementation inC/C++

+

Trang 23

Dr 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 24

Dr 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 25

Dr Nguyen HoMan Rang

Recursion and thebasic components

of recursivealgorithmsProperties ofrecursionDesigning recursivealgorithmsRecursion andbacktrackingRecursionimplementation inC/C++

Trang 26

Dr 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 27

Dr Nguyen HoMan Rang

Recursion and thebasic components

of recursivealgorithmsProperties ofrecursionDesigning recursivealgorithmsRecursion andbacktrackingRecursionimplementation inC/C++

Trang 28

Dr 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 29

Dr Nguyen HoMan Rang

Recursion and thebasic components

of recursivealgorithmsProperties ofrecursionDesigning recursivealgorithmsRecursion andbacktrackingRecursionimplementation inC/C++

Destination Moved disc from pole 3 to pole 2.

Trang 30

Dr 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 31

Dr Nguyen HoMan Rang

Recursion and thebasic components

of recursivealgorithmsProperties ofrecursionDesigning recursivealgorithmsRecursion andbacktrackingRecursionimplementation inC/C++

Moved disc from pole 2 to pole 1.

Trang 32

Dr 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 33

Dr 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 34

Dr Nguyen HoMan Rang

Recursion and thebasic components

of recursivealgorithmsProperties ofrecursionDesigning recursivealgorithmsRecursion andbacktrackingRecursionimplementation inC/C++

The Towers of Hanoi

Trang 35

Dr Nguyen HoMan Rang

Recursion and thebasic components

of recursivealgorithmsProperties ofrecursionDesigning recursivealgorithmsRecursion andbacktrackingRecursionimplementation inC/C++

Trang 36

Dr Nguyen HoMan Rang

Recursion and thebasic components

of recursivealgorithmsProperties ofrecursionDesigning recursivealgorithmsRecursion andbacktrackingRecursionimplementation inC/C++

The Towers of Hanoi

Trang 37

Dr 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 38

Dr Nguyen HoMan Rang

Recursion and thebasic components

of recursivealgorithmsProperties ofrecursionDesigning recursivealgorithmsRecursion andbacktrackingRecursionimplementation inC/C++

Recursion and

backtracking

Trang 39

Dr Nguyen HoMan Rang

Recursion and thebasic components

of recursivealgorithmsProperties ofrecursionDesigning recursivealgorithmsRecursion andbacktrackingRecursionimplementation inC/C++

Trang 40

Dr 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 41

Dr 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 42

Dr 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 43

Dr Nguyen HoMan Rang

Recursion and thebasic components

of recursivealgorithmsProperties ofrecursionDesigning recursivealgorithmsRecursion andbacktrackingRecursionimplementation inC/C++

3.43

Eight Queens Problem

Trang 44

Dr Nguyen HoMan Rang

Recursion and thebasic components

of recursivealgorithmsProperties ofrecursionDesigning recursivealgorithmsRecursion andbacktrackingRecursionimplementation inC/C++

Recursion

implementation in

C/C++

Trang 45

Dr Nguyen HoMan Rang

Recursion and thebasic components

of recursivealgorithmsProperties ofrecursionDesigning recursivealgorithmsRecursion andbacktrackingRecursionimplementation inC/C++

Trang 46

Dr Nguyen HoMan Rang

Recursion and thebasic components

of recursivealgorithmsProperties ofrecursionDesigning recursivealgorithmsRecursion andbacktrackingRecursionimplementation inC/C++

The Towers of Hanoi

Trang 47

Dr Nguyen HoMan Rang

Recursion and thebasic components

of recursivealgorithmsProperties ofrecursionDesigning recursivealgorithmsRecursion andbacktrackingRecursionimplementation inC/C++

Ngày đăng: 25/03/2023, 08:39

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w