Download as pptx, pdf, or txt
Download as pptx, pdf, or txt
You are on page 1of 18

CHƯƠNG 2:

ĐỆ QUI VÀ
GIẢI
THUẬT ĐỆ
QUI
1.Khái niệm đệ qui
- Một số ngôn ngữ lập trình cho phép việc một module
hoặc một hàm được gọi tới chính nó. Kỹ thuật này được
gọi là Đệ qui (Recursion)

- Trong đệ qui, một hàm a có thể: gọi trực tiếp chính


hàm a này hoặc gọi một hàm b mà trả về lời gọi tới hàm
a ban đầu. Hàm a được gọi là hàm đệ qui.

2
1.Khái niệm đệ qui
Ví dụ: một hàm gọi chính nó
Định nghĩa
int function(int value) hàm Value
{
if(value < 1) Gọi hàm
return; value trong
function(value - 1); chính nó
printf("%d ",value);
} 3
2. Giải thuật đệ qui và chương trình đệ qui
 Đặc điểm của hàm đệ qui
- Điều kiện cơ bản: phải có ít nhất một điều kiện để khi
mà gặp điều kiện này thì việc gọi chính hàm đó (gọi đệ
qui) sẽ dừng lại.
- Tiệm cận: mỗi khi hàm đệ qui được gọi thì nó càng
tiệm cận tới điều kiện cơ bản.
4
2. Giải thuật đệ qui và chương trình đệ qui
 So sánh đệ qui và vòng lặp
Đệ qui Vòng lặp
Đệ qui làm cho chương Lấy số vòng lặp để tính
trình dễ đọc hơn và với độ phức tạp thời gian.
các hệ thống CPU cải
tiến ngày nay thì đệ qui
là hiệu quả hơn rất nhiều
khi so với các vòng lặp. 5
2. Giải thuật đệ qui và chương trình đệ qui
Đệ qui Vòng lặp
Mọi thứ là hằng số, chúng Trình biên dịch sẽ tự cập
ta tính thời gian một lời nhật giá trị của biến được
gọi đệ qui được tạo ra sử dụng ngay trong vòng
lặp.
Hệ thống cần lưu giữ các Trình biên dịch hầu như
bản ghi động mỗi khi một không cần thêm bộ nhớ.
lời gọi đệ qui được tạo 6
3.Ưu và nhược điểm của giải thuật đệ qui
 Ưu điểm:
- Chương trình dễ hiểu
- Có thể thực hiện một số lượng lớn các thao tác tính
toán thông qua 1 đoạn chương trình ngắn gọn.
 Nhược điểm:
- Chậm
- Tốn nhiều dung lượng
7
4. Các bài toán đệ qui căn bản
4.1. Bài toán Tháp Hà Nội (Tower of Hanoi) là
một trò chơi toán học bao gồm 3 cột và với số
đĩa nhiều hơn 1.
Nhiệm vụ của trò chơi là di chuyển các đĩa có
kích cỡ khác nhau sang cột khác sao cho vẫn
đảm bảo thứ tự ban đầu của các đĩa: đĩa nhỏ
nằm trên đĩa lớn. 8
4. Các bài toán đệ qui căn bản

9
4. Các bài toán đệ qui căn bản
Qui tắc trò chơi toán học Tháp Hà Nội
- Mỗi lần chỉ có thể di chuyển một đĩa từ cột
này sang cột khác.
- Chỉ được di chuyển đĩa nằm trên cùng.
- Đĩa có kích thước lớn hơn không thể được đặt
trên đĩa có kích thước nhỏ hơn. 10
4. Các bài toán đệ qui căn bản

Bài toán Tháp Hà Nội với số đĩa là n có số


bước tối thiểu là 2n−1. Do đó, với trường hợp
3 đĩa, bài toán Tháp Hà Nội có thể được giải
sau 23−1 = 7 bước.

11
4. Các bài toán đệ qui căn bản
Cột trung
Cột nguồn: gian trong Cột đích:
chứa các đĩa quá trình di chứa các đĩa
ban đầu chuyển đĩa cần di
chuyển tới

12
4. Các bài toán đệ qui căn bản
Nếu chỉ có 1 đĩa, di chuyển từ cotNguon tới cotDich.

13
4. Các bài toán đệ qui căn bản
Nếu có 2 đĩa: di chuyển đĩa trên cùng tới cotTrungGian.
Sau đó chúng ta di chuyển đĩa ở dưới cùng tới cotDich
Và cuối cùng di chuyển đĩa nhỏ nhất từ cotTrungGian
về cotDich.

14
4. Các bài toán đệ qui căn bản
Nếu có 3 đĩa trở lên
Chia ngăn xếp các đĩa thành hai phần: đĩa thứ
lớn nhất (đĩa thứ n) là phần thứ nhất và (n-1)
đĩa còn lại là phần thứ hai.
4. Các bài toán đệ qui căn bản
Bước 1: Di chuyển n-1 đĩa từ cotNguon tới cotTrungGian
Bước 2: Di chuyển đĩa thứ n từ cotNguon tới cotDich
Bước 3: Di chuyển n-1 đĩa từ cotTrungGian về cotDich

16
4. Các bài toán đệ qui căn bản
 Giải thuật đệ qui cho bài toán Tháp Hà Nội
Bắt đầu giải thuật Tháp Hà nội Hanoi(disk, cotNguon, cotDich,
cotTrungGian)
IF disk == 0, thì
di chuyển đĩa từ cotNguon tới cotDich
ELSE
Hanoi(disk - 1, cotNguon, cotTrungGian, cotDich) <small>
di chuyển đĩa từ cotNguon tới cotDich <small>
Hanoi(disk - 1, cotTrungGian, cotDich, cotNguon) <small>
Kết thúc IF 17
THANK
S!
Any questions?
You can find me at @username
& user@mail.me

You might also like