SlideShare una empresa de Scribd logo
1 de 28
NGUYỄN THỊ TÚ MI
EMAIL: nttmi@hcmuaf.edu.vn
ĐỆ QUI
Nội dung
Khái niệm đệ qui.
Thiết kế giải thuật đệ qui
Khái niệm đệ qui
Đệ qui là một khái niệm cơ bản trong toán học và khoa
học máy tính. Một đối tượng được gọi là đệ qui nếu nó
hoặc một phần của nó được định nghĩa thông qua khái
niệm về chính nó.
Trong lĩnh vực lập trình: 1 chương trình gọi là đệ qui nếu
nó gọi lại chính nó.
Chương trình đệ qui luôn kiểm tra điều kiện dừng:
 Nếu không thỏa, tiếp tục gọi đệ qui.
 Nếu thỏa mãn  không gọi chính nó nữa, chấm dứt đệ qui.
Khái niệm đệ qui
Ví dụ:
 Định nghĩa số tự nhiên:
 0 là số tự nhiên.
 Nếu k là số tự nhiên thì k+1 cũng là số tự nhiên.
 Định nghĩa xâu kí tự (chuỗi kí tự) bằng đệ qui:
 Xâu rỗng là xâu kí tự
 Một chữ cái bất kì ghép với 1 xâu sẽ tạo thành xâu mới
 Định nghĩa hàm giai thừa n!:
 Khi n = 0, định nghĩa 0! = 1
 Khi n>0, định nghĩa n! = (n-1)! * n
Khái niệm đệ qui
Ví dụ
private int Factor(int n){
if (n==0) return 1;
else return n*Factor(n-1);
}
Đặc điểm của chương trình đệ qui:
 Chương trình này có thể gọi chính nó
 Khi chương trình gọi chính nó thì mục đích là để giải quyết một vấn
đề tương tự nhưng nhỏ hơn.
 Vấn đề nhỏ hơn này một lúc nào đó sẽ đơn giản tới mức chương trình
có thể tự giải quyết mà không cần phải gọi chính nó nữa.
Khái niệm đệ qui
Để xây dựng 1 chương trình đệ qui cần tồn tại 1 công thức
đệ qui. Công thức này gồm 2 phần:
 Phần đệ qui: recursive case
 Phần cơ bản: base case
Ưu điểm của chương trình đệ qui:
 Có thể thực hiện một 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.
 Có thể định nghĩa một tập vô hạn các đối tượng thông qua 1 số hữu
hạn lời phát biểu.
Điều kiện để viết chương trình đệ qui
Vấn đề cần xử lý phải giải quyết được bằng cách đệ qui.
Ngôn ngữ dùng viết chương trình phải hỗ trợ đệ qui.
Các loại đệ qui:
 Đệ qui trực tiếp: một hàm gọi tới chính nó
 Đệ qui gián tiếp: Một hàm gọi tới hàm khác, hàm khác này gọi tới
hàm bạn đầu
Khi nào không nên sử dụng đệ qui
Khi một hàm đệ qui gọi chính nó thì tập các đối tượng
được sử dụng trong hàm này như: biến, hằng, cấu trúc…
và các thông số cần cho việc chuyển giao điều khiển sẽ
được sinh ra.
Sử dụng đệ qui đôi khi tạo ra những tính toán thừa, không
cần thiết do tính chất tự động gọi thực hiện thủ tục khi
chưa kết thúc đệ qui.
Nếu chương trình có thể viết dưới dạng lặp hoặc các cấu
trúc lệnh khác thì không nên sử dụng đệ qui.
Ví dụ
Dãy Fibonaci được định nghĩa như sau:
 F(0) = 0;
 F(1) = 1;
 Với n>1 thì F(n) = F(n-1) + F(n-2)
Phương thức đệ qui để tính dãy Fibonaci
int Fib(int i){
if(i==0) return 0;
if(i==1) return 1;
return Fib (i-1)+Fib (i-2);
}
Base case
Recusive case
Ví dụ
Phương thức dùng vòng lặp để tính dãy Fibonaci:
int Fib(int n){
int fib1=1,fib0=0, fibn, i;
if(n<=1)
return n;
else{
for(i=2;i<=n;i++) {
fibn=fib1+fib0;
fib0=fib1;
fib1=fibn;
}
return fibn;
}
}
Thiết kế giải thuật đệ qui
Thuật toán Euclid tính ước số chung lớn nhất của hai số
nguyên dương.
 Ước số chung lớn nhất của hai số nguyên dương m, n là một số k lớn
nhất sao cho m và n đều chia hết cho k.
 Cách giải:
 Cách 1: vét cạn
 Cách 2: thuật toán Euclid: giả sử m>n  USCLN (m, n) == USCLN (m
mod n, n)
 Ví dụ:
• USCLN(108, 45) 108 chia cho 45 dư 18
• USCLN(45, 18) 45 chia cho 18 dư 9
• USCLN(18, 9) 18 chia cho 9 dư 0
• USCLN(9, 0) Kết quả USCLN của 108 và 45 là 9
Thiết kế giải thuật đệ qui
Cài đặt thuật toán:
int USCLN(int m, int n){
if(n==0) return m;
else return USCLN(n, m%n);
}
Giải thuật đệ qui dạng chia để trị
Ý tưởng:
 Phân chia bài toán thành 2 hoặc nhiều bài toán con có dạng tương tự
và lần lượt giải quyết từng bài toán con này.
 Các bài toán con này được coi là dạng đơn giản hơn của bài toán ban
đầu.
Ví dụ:
 Quick sort
 Bài toán tháp Hà Nội
Bài toán tháp Hà Nội
Phát biểu bài toán: có 3 chiếc cọc và bộ n đĩa. Các đĩa này có
kích thước khác nhau, các đãi đều có lỗ để xuyên chúng qua
đầu cọc.
Ban đầu các đĩa đều nằm trên 1 cọc, trong đó đĩa nhỏ sẽ nằm
trên đĩa lớn.
Yêu cầu: chuyển bộ n đĩa từ cọc ban đầu A sang cọc đích C sao
cho vẫn đảm bảo nguyên tắc đĩa nhỏ trên đĩa lớn dưới.
Bài toán tháp Hà Nội
Bài toán tháp Hà Nội
Nhận xét:
 Ở đây ta thấy bài toán chuyển n cọc thành bài toán đơn giản hơn là
chuyển n-1 cọc.
 Điểm dừng của thuật toán là n = 1, ta chuyển thẳng cọc này từ cọc
ban đầu sang cọc đích.
 Bài toán chuyển n đĩa được chia làm 2 bài toán nhỏ hơn là chuyển n-
1 đĩa:
 Lần 1: chuyển n-1 đĩa từ cọc A sang cọc trung gian B.
 Lần 2: chuyển n-1 đĩa từ cọc B sang cọc đích C.
Demo
Bài toán tháp Hà Nội
Cài đặt đệ qui
public void chuyen(int n, char a, char b) {
System.out.println("Chuyen dia thu " + n + " tu coc " + a + " sang coc " + b);
}
public void thapHaNoi(int n, char a, char b, char c) {
if (n == 1) {
chuyen(1, a, c);
} else {
thapHaNoi(n-1, a, b, c);
chuyen(n, a, c);
thapHaNoi(n-1, b, c, a);
}
}
Giải thuật đệ qui dạng quay lui
Ý tưởng
 Các thuật toán thường có 1 qui tắc tính toán nào đó nhưng có những vấn đề
không tuân theo qui tắc nào hết dùng thử sai (trial-and-error) để giải
quyết.
 Đặc điểm của dạng toán này là:
 Không thể dùng biện pháp phân tích
 Phải dùng phương pháp tính toán thủ công với sự kiên trì và độ chính xác cao.
 Quá trình thử sai sẽ được thực hiện trên các bài toán đơn giản hơn.
 Thường được mô tả dưới dạng đệ qui và liên quan đến việc giải quyết 1 số hữu
hạn bài toán con.
Ví dụ:
 Tám quân hậu
 Mã đi tuần
Bài toán 8 quân hậu
Là một ví dụ nổi tiếng của việc sử dụng phương pháp thử
sai & thuật toán quay lui.
Phát biểu: Tìm cách đặt 8 quân hậu trên 1 bàn cờ mà
không có 2 quân hậu nào có thể ăn được nhau.
i
j
Ω
Bài toán 8 quân hậu
Bài toán 8 quân hậu (mô phỏng)
Ω1
Ω2
Ω3
Ω4
Ω5
Ω6
Ω7
Ω8
1 2 3 4 5 6 7 8
8
7
6
5
4
3
2
1
Bài toán 8 quân hậu
Bài toán 8 quân hậu (mô phỏng)
Ω1
Ω2
Ω3
Ω4
Ω5
Ω6
Ω7
Ω8
1 2 3 4 5 6 7 8
8
7
6
5
4
3
2
1 Ω1
Ω2
Ω3
Ω4
Ω5
Ω6
Ω7
Bài toán 8 quân hậu
Bài toán 8 quân hậu (mô phỏng)
Ω1
Ω2
Ω3
Ω4
Ω5
Ω6
Ω7
Ω8
1 2 3 4 5 6 7 8
8
7
6
5
4
3
2
1
Ω7
Ω6
Ω5
Ω5
Ω4
Bài toán 8 quân hậu
Bài toán 8 quân hậu (mô phỏng)
Ω1
Ω2
Ω3
Ω8
1 2 3 4 5 6 7 8
8
7
6
5
4
3
2
1
Ω7
Ω6
Ω5
Ω4
Ω5
Ω6
Ω7
Bài toán 8 quân hậu
Bài toán 8 quân hậu (mô phỏng)
Ω1
Ω2
Ω3
Ω8
1 2 3 4 5 6 7 8
8
7
6
5
4
3
2
1
Ω7
Ω6
Ω5
Ω4
Ω5
Ω6
Ω7
Ω5
Ω4
Bài toán 8 quân hậu
Bài toán 8 quân hậu
Ω
Ω
Ω
Ω
Ω
Ω
Ω
Ω
Ω1
Ω2
Ω3
Ω4
Ω5
Ω6
Ω7
Ω8
Bài toán 8 quân hậu
void datHau(int i){
Khởi tạo danh sách các vị trí có thể đặt quân hậu tiếp theo;
do{
Lựa chọn vị trí đặt quân hậu tiếp theo;
if Vị trí đặt an toàn{
Đặt hậu;
if i<8{
datHau(i+1);
if Không thành côngBỏ hậu đã đặt ra khỏi vị trí
}
}
} while(Không thành công)&&(Vẫn còn lựa chọn)
}
Tóm tắt
Chương này chúng ta cần nắm vững các vấn đề sau:
 Định ngĩa bằng đệ qui
 Chương trình đệ qui
 Ưu điểm và khuyết điểm của đệ qui
 Khi nào không nên sử dụng đệ qui
 Các dạng đệ qui và ví dụ:
 Chia để trị
 Quay lui
Bài tập
Bài 1: Một chương trình đệ qui khi gọi chính nó thì kích
thước như thế nào so với bài toán ban đầu? Làm thế nào
để tránh lặp vô hạn?
Bài 2: Viết chương trình đệ qui tính tổng số lẻ trong
khoảng 1 đến 2n+1.
Bài 3: Bài toán hoán vị.
Bài 4: Bài toán tháp Hà Nội.
Bài 5: Bài toán 8 quân hậu.
Bài 6: Bài toán mã đi tuần.

Más contenido relacionado

La actualidad más candente

Ngôn ngữ lập trình pascal (bổ trợ tin 11)
Ngôn ngữ lập trình pascal (bổ trợ tin 11)Ngôn ngữ lập trình pascal (bổ trợ tin 11)
Ngôn ngữ lập trình pascal (bổ trợ tin 11)Hong Phuoc Nguyen
 
Bài 11 Kiểu mảng(tt)
Bài 11 Kiểu mảng(tt)Bài 11 Kiểu mảng(tt)
Bài 11 Kiểu mảng(tt)Võ Tâm Long
 
Lớp 11 --chương 4 -- bài 11 --Kiểu mảng
Lớp 11 --chương 4 -- bài 11 --Kiểu mảngLớp 11 --chương 4 -- bài 11 --Kiểu mảng
Lớp 11 --chương 4 -- bài 11 --Kiểu mảngHoàng Kỳ Anh
 
Bài 5: Các thuật toán sắp xếp và tìm kiếm cơ bản - Giáo trình FPT
Bài 5: Các thuật toán sắp xếp và tìm kiếm cơ bản - Giáo trình FPTBài 5: Các thuật toán sắp xếp và tìm kiếm cơ bản - Giáo trình FPT
Bài 5: Các thuật toán sắp xếp và tìm kiếm cơ bản - Giáo trình FPTMasterCode.vn
 
Ctdl C05
Ctdl C05Ctdl C05
Ctdl C05giang
 
[Pascal] sang tao1[v5.10]
[Pascal] sang tao1[v5.10][Pascal] sang tao1[v5.10]
[Pascal] sang tao1[v5.10]MasterCode.vn
 
TÌM HIỂU VỀ MỘT SỐ THUẬT TOÁN SẮP XẾP ĐƠN GIẢN
TÌM HIỂU VỀ MỘT SỐ THUẬT TOÁN SẮP XẾP ĐƠN GIẢNTÌM HIỂU VỀ MỘT SỐ THUẬT TOÁN SẮP XẾP ĐƠN GIẢN
TÌM HIỂU VỀ MỘT SỐ THUẬT TOÁN SẮP XẾP ĐƠN GIẢNTrần Nguyên
 
Nmlt c01 cac_khainiemcobanvelaptrinh
Nmlt c01 cac_khainiemcobanvelaptrinhNmlt c01 cac_khainiemcobanvelaptrinh
Nmlt c01 cac_khainiemcobanvelaptrinhMinh Ngoc Tran
 
Lap trinh pascal
Lap trinh pascalLap trinh pascal
Lap trinh pascalLoan Nguyen
 
Ctdl C01
Ctdl C01Ctdl C01
Ctdl C01giang
 
[Share] tổng hợp các bài tập c căn bản
[Share] tổng hợp các bài tập c căn bản[Share] tổng hợp các bài tập c căn bản
[Share] tổng hợp các bài tập c căn bảnKhong Biet Khong Quen
 
Huong danontapc
Huong danontapcHuong danontapc
Huong danontapcHồ Lợi
 
Phần 12: Hàm (Nâng cao)
Phần 12: Hàm (Nâng cao)Phần 12: Hàm (Nâng cao)
Phần 12: Hàm (Nâng cao)Huy Rùa
 
3 Function
3 Function3 Function
3 FunctionCuong
 

La actualidad más candente (19)

Bai 11 kieu mang (tiet 1)
Bai 11 kieu mang (tiet 1)Bai 11 kieu mang (tiet 1)
Bai 11 kieu mang (tiet 1)
 
Ngôn ngữ lập trình pascal (bổ trợ tin 11)
Ngôn ngữ lập trình pascal (bổ trợ tin 11)Ngôn ngữ lập trình pascal (bổ trợ tin 11)
Ngôn ngữ lập trình pascal (bổ trợ tin 11)
 
Bài 11 Kiểu mảng(tt)
Bài 11 Kiểu mảng(tt)Bài 11 Kiểu mảng(tt)
Bài 11 Kiểu mảng(tt)
 
Lớp 11 --chương 4 -- bài 11 --Kiểu mảng
Lớp 11 --chương 4 -- bài 11 --Kiểu mảngLớp 11 --chương 4 -- bài 11 --Kiểu mảng
Lớp 11 --chương 4 -- bài 11 --Kiểu mảng
 
Bài 5: Các thuật toán sắp xếp và tìm kiếm cơ bản - Giáo trình FPT
Bài 5: Các thuật toán sắp xếp và tìm kiếm cơ bản - Giáo trình FPTBài 5: Các thuật toán sắp xếp và tìm kiếm cơ bản - Giáo trình FPT
Bài 5: Các thuật toán sắp xếp và tìm kiếm cơ bản - Giáo trình FPT
 
Chuong4 uni
Chuong4 uniChuong4 uni
Chuong4 uni
 
Ctdl C05
Ctdl C05Ctdl C05
Ctdl C05
 
Chuong7
Chuong7Chuong7
Chuong7
 
[Pascal] sang tao1[v5.10]
[Pascal] sang tao1[v5.10][Pascal] sang tao1[v5.10]
[Pascal] sang tao1[v5.10]
 
Nmlt c06 ham
Nmlt c06 hamNmlt c06 ham
Nmlt c06 ham
 
TÌM HIỂU VỀ MỘT SỐ THUẬT TOÁN SẮP XẾP ĐƠN GIẢN
TÌM HIỂU VỀ MỘT SỐ THUẬT TOÁN SẮP XẾP ĐƠN GIẢNTÌM HIỂU VỀ MỘT SỐ THUẬT TOÁN SẮP XẾP ĐƠN GIẢN
TÌM HIỂU VỀ MỘT SỐ THUẬT TOÁN SẮP XẾP ĐƠN GIẢN
 
Nmlt c01 cac_khainiemcobanvelaptrinh
Nmlt c01 cac_khainiemcobanvelaptrinhNmlt c01 cac_khainiemcobanvelaptrinh
Nmlt c01 cac_khainiemcobanvelaptrinh
 
Lap trinh pascal
Lap trinh pascalLap trinh pascal
Lap trinh pascal
 
Ctdl C01
Ctdl C01Ctdl C01
Ctdl C01
 
Chuong8
Chuong8Chuong8
Chuong8
 
[Share] tổng hợp các bài tập c căn bản
[Share] tổng hợp các bài tập c căn bản[Share] tổng hợp các bài tập c căn bản
[Share] tổng hợp các bài tập c căn bản
 
Huong danontapc
Huong danontapcHuong danontapc
Huong danontapc
 
Phần 12: Hàm (Nâng cao)
Phần 12: Hàm (Nâng cao)Phần 12: Hàm (Nâng cao)
Phần 12: Hàm (Nâng cao)
 
3 Function
3 Function3 Function
3 Function
 

Similar a Chuong2 de qui

Đề tài: Tìm nghiệm của một bài toán bằng cách xem xét tất cả các phương án có...
Đề tài: Tìm nghiệm của một bài toán bằng cách xem xét tất cả các phương án có...Đề tài: Tìm nghiệm của một bài toán bằng cách xem xét tất cả các phương án có...
Đề tài: Tìm nghiệm của một bài toán bằng cách xem xét tất cả các phương án có...Viết thuê trọn gói ZALO 0934573149
 
Kỹ thuật lập trình (khoa toán tin học)
Kỹ thuật lập trình (khoa toán tin học)Kỹ thuật lập trình (khoa toán tin học)
Kỹ thuật lập trình (khoa toán tin học)nhok_lovely
 
Cac van de co so kh may tinh
Cac van de co so kh may tinhCac van de co so kh may tinh
Cac van de co so kh may tinhTunAnh346
 
Chuong 1 Matlab co ban.pdf
Chuong 1 Matlab co ban.pdfChuong 1 Matlab co ban.pdf
Chuong 1 Matlab co ban.pdfHngTrn365275
 
Chuong 1 Matlab co ban.pdf
Chuong 1 Matlab co ban.pdfChuong 1 Matlab co ban.pdf
Chuong 1 Matlab co ban.pdfnguyenkaka2
 
Giáo trình Phân tích và thiết kế giải thuật - CHAP 1
Giáo trình Phân tích và thiết kế giải thuật - CHAP 1Giáo trình Phân tích và thiết kế giải thuật - CHAP 1
Giáo trình Phân tích và thiết kế giải thuật - CHAP 1Nguyễn Công Hoàng
 
Nmlt C01 Cac Khai Niem Co Ban Ve Lap Trinh
Nmlt C01 Cac Khai Niem Co Ban Ve Lap TrinhNmlt C01 Cac Khai Niem Co Ban Ve Lap Trinh
Nmlt C01 Cac Khai Niem Co Ban Ve Lap TrinhCuong
 
Chap1 new (tran dai's conflicted copy 2013 04-02)
Chap1 new (tran dai's conflicted copy 2013 04-02)Chap1 new (tran dai's conflicted copy 2013 04-02)
Chap1 new (tran dai's conflicted copy 2013 04-02)Loc Tran
 
Chuong 2. de quy dai hoc
Chuong 2. de quy   dai hocChuong 2. de quy   dai hoc
Chuong 2. de quy dai hocVũ Nam
 
Bai toan va thuat toan
Bai toan va thuat toanBai toan va thuat toan
Bai toan va thuat toanHữu Duy Duy
 
Kỹ thuật lập trình - PGS.TS. Phạm Thế Bảo
Kỹ thuật lập trình - PGS.TS. Phạm Thế BảoKỹ thuật lập trình - PGS.TS. Phạm Thế Bảo
Kỹ thuật lập trình - PGS.TS. Phạm Thế BảoNguyen Van Nghiem
 
Ctdl+va+gt chuong+1 4
Ctdl+va+gt chuong+1 4Ctdl+va+gt chuong+1 4
Ctdl+va+gt chuong+1 4Do Ngoc Tuan
 
Ctdl+va+gt chuong+1 4
Ctdl+va+gt chuong+1 4Ctdl+va+gt chuong+1 4
Ctdl+va+gt chuong+1 4Do Ngoc Tuan
 

Similar a Chuong2 de qui (20)

Đề tài: Tìm nghiệm của một bài toán bằng cách xem xét tất cả các phương án có...
Đề tài: Tìm nghiệm của một bài toán bằng cách xem xét tất cả các phương án có...Đề tài: Tìm nghiệm của một bài toán bằng cách xem xét tất cả các phương án có...
Đề tài: Tìm nghiệm của một bài toán bằng cách xem xét tất cả các phương án có...
 
Gt de quy
Gt de quyGt de quy
Gt de quy
 
Gt de quy_2
Gt de quy_2Gt de quy_2
Gt de quy_2
 
Chap7 new
Chap7 newChap7 new
Chap7 new
 
Kỹ thuật lập trình (khoa toán tin học)
Kỹ thuật lập trình (khoa toán tin học)Kỹ thuật lập trình (khoa toán tin học)
Kỹ thuật lập trình (khoa toán tin học)
 
Thuat Toan 2
Thuat Toan 2Thuat Toan 2
Thuat Toan 2
 
Cac van de co so kh may tinh
Cac van de co so kh may tinhCac van de co so kh may tinh
Cac van de co so kh may tinh
 
Chuong 1 Matlab co ban.pdf
Chuong 1 Matlab co ban.pdfChuong 1 Matlab co ban.pdf
Chuong 1 Matlab co ban.pdf
 
Chuong 1 Matlab co ban.pdf
Chuong 1 Matlab co ban.pdfChuong 1 Matlab co ban.pdf
Chuong 1 Matlab co ban.pdf
 
Giáo trình Phân tích và thiết kế giải thuật - CHAP 1
Giáo trình Phân tích và thiết kế giải thuật - CHAP 1Giáo trình Phân tích và thiết kế giải thuật - CHAP 1
Giáo trình Phân tích và thiết kế giải thuật - CHAP 1
 
Nmlt C01 Cac Khai Niem Co Ban Ve Lap Trinh
Nmlt C01 Cac Khai Niem Co Ban Ve Lap TrinhNmlt C01 Cac Khai Niem Co Ban Ve Lap Trinh
Nmlt C01 Cac Khai Niem Co Ban Ve Lap Trinh
 
Chap1 new (tran dai's conflicted copy 2013 04-02)
Chap1 new (tran dai's conflicted copy 2013 04-02)Chap1 new (tran dai's conflicted copy 2013 04-02)
Chap1 new (tran dai's conflicted copy 2013 04-02)
 
Chuong 2. de quy dai hoc
Chuong 2. de quy   dai hocChuong 2. de quy   dai hoc
Chuong 2. de quy dai hoc
 
Tin11
Tin11Tin11
Tin11
 
Emailing buoi 2 thuat toan
Emailing buoi 2   thuat toanEmailing buoi 2   thuat toan
Emailing buoi 2 thuat toan
 
Co ban ve_matlab
Co ban ve_matlabCo ban ve_matlab
Co ban ve_matlab
 
Bai toan va thuat toan
Bai toan va thuat toanBai toan va thuat toan
Bai toan va thuat toan
 
Kỹ thuật lập trình - PGS.TS. Phạm Thế Bảo
Kỹ thuật lập trình - PGS.TS. Phạm Thế BảoKỹ thuật lập trình - PGS.TS. Phạm Thế Bảo
Kỹ thuật lập trình - PGS.TS. Phạm Thế Bảo
 
Ctdl+va+gt chuong+1 4
Ctdl+va+gt chuong+1 4Ctdl+va+gt chuong+1 4
Ctdl+va+gt chuong+1 4
 
Ctdl+va+gt chuong+1 4
Ctdl+va+gt chuong+1 4Ctdl+va+gt chuong+1 4
Ctdl+va+gt chuong+1 4
 

Último

Tổng hợp Ngữ pháp Tiếng Anh 11 cho học sinh.docx
Tổng hợp Ngữ pháp Tiếng Anh 11 cho học sinh.docxTổng hợp Ngữ pháp Tiếng Anh 11 cho học sinh.docx
Tổng hợp Ngữ pháp Tiếng Anh 11 cho học sinh.docxTrangL188166
 
ĐỀ THAM KHẢO THEO HƯỚNG MINH HỌA 2025 KIỂM TRA CUỐI HỌC KÌ 2 NĂM HỌC 2023-202...
ĐỀ THAM KHẢO THEO HƯỚNG MINH HỌA 2025 KIỂM TRA CUỐI HỌC KÌ 2 NĂM HỌC 2023-202...ĐỀ THAM KHẢO THEO HƯỚNG MINH HỌA 2025 KIỂM TRA CUỐI HỌC KÌ 2 NĂM HỌC 2023-202...
ĐỀ THAM KHẢO THEO HƯỚNG MINH HỌA 2025 KIỂM TRA CUỐI HỌC KÌ 2 NĂM HỌC 2023-202...Nguyen Thanh Tu Collection
 
BỘ ĐỀ CHÍNH THỨC + TÁCH ĐỀ + ĐỀ LUYỆN THI VÀO LỚP 10 CHUYÊN TOÁN CÁC TỈNH NĂM...
BỘ ĐỀ CHÍNH THỨC + TÁCH ĐỀ + ĐỀ LUYỆN THI VÀO LỚP 10 CHUYÊN TOÁN CÁC TỈNH NĂM...BỘ ĐỀ CHÍNH THỨC + TÁCH ĐỀ + ĐỀ LUYỆN THI VÀO LỚP 10 CHUYÊN TOÁN CÁC TỈNH NĂM...
BỘ ĐỀ CHÍNH THỨC + TÁCH ĐỀ + ĐỀ LUYỆN THI VÀO LỚP 10 CHUYÊN TOÁN CÁC TỈNH NĂM...Nguyen Thanh Tu Collection
 
Tài liệu kỹ thuật điều hòa Panasonic - Điện lạnh Bách Khoa
Tài liệu kỹ thuật điều hòa Panasonic - Điện lạnh Bách KhoaTài liệu kỹ thuật điều hòa Panasonic - Điện lạnh Bách Khoa
Tài liệu kỹ thuật điều hòa Panasonic - Điện lạnh Bách KhoaKhiNguynCngtyTNHH
 
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...Nguyen Thanh Tu Collection
 
Slide Quá trình và thiết bị truyền khối.pdf
Slide Quá trình và thiết bị truyền khối.pdfSlide Quá trình và thiết bị truyền khối.pdf
Slide Quá trình và thiết bị truyền khối.pdfMinhDuy925559
 
Xem sim phong thủy luận Hung - Cát số điện thoại chính xác nhất.pdf
Xem sim phong thủy luận Hung - Cát số điện thoại chính xác nhất.pdfXem sim phong thủy luận Hung - Cát số điện thoại chính xác nhất.pdf
Xem sim phong thủy luận Hung - Cát số điện thoại chính xác nhất.pdfXem Số Mệnh
 
NỘI DUNG HỌC THI ôn thi môn LỊCH SỬ ĐẢNG.docx
NỘI DUNG HỌC THI ôn thi môn LỊCH SỬ ĐẢNG.docxNỘI DUNG HỌC THI ôn thi môn LỊCH SỬ ĐẢNG.docx
NỘI DUNG HỌC THI ôn thi môn LỊCH SỬ ĐẢNG.docx7E26NguynThThyLinh
 
ĐỀ CƯƠNG + TEST ÔN TẬP CUỐI KÌ 2 TIẾNG ANH 11 - GLOBAL SUCCESS (THEO CHUẨN MI...
ĐỀ CƯƠNG + TEST ÔN TẬP CUỐI KÌ 2 TIẾNG ANH 11 - GLOBAL SUCCESS (THEO CHUẨN MI...ĐỀ CƯƠNG + TEST ÔN TẬP CUỐI KÌ 2 TIẾNG ANH 11 - GLOBAL SUCCESS (THEO CHUẨN MI...
ĐỀ CƯƠNG + TEST ÔN TẬP CUỐI KÌ 2 TIẾNG ANH 11 - GLOBAL SUCCESS (THEO CHUẨN MI...Nguyen Thanh Tu Collection
 
Có nên đo áp lực tĩnh mạch trung tâm để hướng dẫn việc xử trí dịch truyền ?
Có nên đo áp lực tĩnh mạch trung tâm để hướng dẫn việc xử trí dịch truyền ?Có nên đo áp lực tĩnh mạch trung tâm để hướng dẫn việc xử trí dịch truyền ?
Có nên đo áp lực tĩnh mạch trung tâm để hướng dẫn việc xử trí dịch truyền ?tbftth
 
ĐỀ CƯƠNG + TEST ÔN TẬP CUỐI KÌ 2 TIẾNG ANH 11 - GLOBAL SUCCESS (THEO CHUẨN MI...
ĐỀ CƯƠNG + TEST ÔN TẬP CUỐI KÌ 2 TIẾNG ANH 11 - GLOBAL SUCCESS (THEO CHUẨN MI...ĐỀ CƯƠNG + TEST ÔN TẬP CUỐI KÌ 2 TIẾNG ANH 11 - GLOBAL SUCCESS (THEO CHUẨN MI...
ĐỀ CƯƠNG + TEST ÔN TẬP CUỐI KÌ 2 TIẾNG ANH 11 - GLOBAL SUCCESS (THEO CHUẨN MI...Nguyen Thanh Tu Collection
 
BỘ ĐỀ KIỂM TRA CUỐI KÌ 2 TIẾNG ANH I-LEARN SMART START LỚP 3, 4 NĂM HỌC 2023-...
BỘ ĐỀ KIỂM TRA CUỐI KÌ 2 TIẾNG ANH I-LEARN SMART START LỚP 3, 4 NĂM HỌC 2023-...BỘ ĐỀ KIỂM TRA CUỐI KÌ 2 TIẾNG ANH I-LEARN SMART START LỚP 3, 4 NĂM HỌC 2023-...
BỘ ĐỀ KIỂM TRA CUỐI KÌ 2 TIẾNG ANH I-LEARN SMART START LỚP 3, 4 NĂM HỌC 2023-...Nguyen Thanh Tu Collection
 
Gieo quẻ kinh dịch, xin xăm,Xin lộc thánh.pdf
Gieo quẻ kinh dịch, xin xăm,Xin lộc thánh.pdfGieo quẻ kinh dịch, xin xăm,Xin lộc thánh.pdf
Gieo quẻ kinh dịch, xin xăm,Xin lộc thánh.pdfXem Số Mệnh
 
GIÁO ÁN KẾ HOẠCH BÀI DẠY CÔNG NGHỆ 8 KẾT NỐI TRI THỨC - CẢ NĂM THEO CÔNG VĂN ...
GIÁO ÁN KẾ HOẠCH BÀI DẠY CÔNG NGHỆ 8 KẾT NỐI TRI THỨC - CẢ NĂM THEO CÔNG VĂN ...GIÁO ÁN KẾ HOẠCH BÀI DẠY CÔNG NGHỆ 8 KẾT NỐI TRI THỨC - CẢ NĂM THEO CÔNG VĂN ...
GIÁO ÁN KẾ HOẠCH BÀI DẠY CÔNG NGHỆ 8 KẾT NỐI TRI THỨC - CẢ NĂM THEO CÔNG VĂN ...Nguyen Thanh Tu Collection
 
GIẢI-ĐỀ-CƯƠNG-NHẬP-MÔN-KHOA-HỌC-XÃ-HỘI-VÀ-NHÂN-VĂN-KHIÊM-BK69.pdf
GIẢI-ĐỀ-CƯƠNG-NHẬP-MÔN-KHOA-HỌC-XÃ-HỘI-VÀ-NHÂN-VĂN-KHIÊM-BK69.pdfGIẢI-ĐỀ-CƯƠNG-NHẬP-MÔN-KHOA-HỌC-XÃ-HỘI-VÀ-NHÂN-VĂN-KHIÊM-BK69.pdf
GIẢI-ĐỀ-CƯƠNG-NHẬP-MÔN-KHOA-HỌC-XÃ-HỘI-VÀ-NHÂN-VĂN-KHIÊM-BK69.pdfHngNguyn271079
 
.................KHTN 9....................................Viet Nam.......
.................KHTN 9....................................Viet Nam........................KHTN 9....................................Viet Nam.......
.................KHTN 9....................................Viet Nam.......thoa051989
 
50 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
50 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...50 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
50 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...Nguyen Thanh Tu Collection
 
Giáo trình xã hội học Thể dục Thể thao hay
Giáo trình xã hội học Thể dục Thể thao hayGiáo trình xã hội học Thể dục Thể thao hay
Giáo trình xã hội học Thể dục Thể thao hayLcTh15
 
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...Nguyen Thanh Tu Collection
 
VẬN DỤNG KIẾN THỨC LIÊN MÔN TRONG GIẢI BÀI TẬP ÔN THI THPTQG MÔN SINH HỌC - H...
VẬN DỤNG KIẾN THỨC LIÊN MÔN TRONG GIẢI BÀI TẬP ÔN THI THPTQG MÔN SINH HỌC - H...VẬN DỤNG KIẾN THỨC LIÊN MÔN TRONG GIẢI BÀI TẬP ÔN THI THPTQG MÔN SINH HỌC - H...
VẬN DỤNG KIẾN THỨC LIÊN MÔN TRONG GIẢI BÀI TẬP ÔN THI THPTQG MÔN SINH HỌC - H...Nguyen Thanh Tu Collection
 

Último (20)

Tổng hợp Ngữ pháp Tiếng Anh 11 cho học sinh.docx
Tổng hợp Ngữ pháp Tiếng Anh 11 cho học sinh.docxTổng hợp Ngữ pháp Tiếng Anh 11 cho học sinh.docx
Tổng hợp Ngữ pháp Tiếng Anh 11 cho học sinh.docx
 
ĐỀ THAM KHẢO THEO HƯỚNG MINH HỌA 2025 KIỂM TRA CUỐI HỌC KÌ 2 NĂM HỌC 2023-202...
ĐỀ THAM KHẢO THEO HƯỚNG MINH HỌA 2025 KIỂM TRA CUỐI HỌC KÌ 2 NĂM HỌC 2023-202...ĐỀ THAM KHẢO THEO HƯỚNG MINH HỌA 2025 KIỂM TRA CUỐI HỌC KÌ 2 NĂM HỌC 2023-202...
ĐỀ THAM KHẢO THEO HƯỚNG MINH HỌA 2025 KIỂM TRA CUỐI HỌC KÌ 2 NĂM HỌC 2023-202...
 
BỘ ĐỀ CHÍNH THỨC + TÁCH ĐỀ + ĐỀ LUYỆN THI VÀO LỚP 10 CHUYÊN TOÁN CÁC TỈNH NĂM...
BỘ ĐỀ CHÍNH THỨC + TÁCH ĐỀ + ĐỀ LUYỆN THI VÀO LỚP 10 CHUYÊN TOÁN CÁC TỈNH NĂM...BỘ ĐỀ CHÍNH THỨC + TÁCH ĐỀ + ĐỀ LUYỆN THI VÀO LỚP 10 CHUYÊN TOÁN CÁC TỈNH NĂM...
BỘ ĐỀ CHÍNH THỨC + TÁCH ĐỀ + ĐỀ LUYỆN THI VÀO LỚP 10 CHUYÊN TOÁN CÁC TỈNH NĂM...
 
Tài liệu kỹ thuật điều hòa Panasonic - Điện lạnh Bách Khoa
Tài liệu kỹ thuật điều hòa Panasonic - Điện lạnh Bách KhoaTài liệu kỹ thuật điều hòa Panasonic - Điện lạnh Bách Khoa
Tài liệu kỹ thuật điều hòa Panasonic - Điện lạnh Bách Khoa
 
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
 
Slide Quá trình và thiết bị truyền khối.pdf
Slide Quá trình và thiết bị truyền khối.pdfSlide Quá trình và thiết bị truyền khối.pdf
Slide Quá trình và thiết bị truyền khối.pdf
 
Xem sim phong thủy luận Hung - Cát số điện thoại chính xác nhất.pdf
Xem sim phong thủy luận Hung - Cát số điện thoại chính xác nhất.pdfXem sim phong thủy luận Hung - Cát số điện thoại chính xác nhất.pdf
Xem sim phong thủy luận Hung - Cát số điện thoại chính xác nhất.pdf
 
NỘI DUNG HỌC THI ôn thi môn LỊCH SỬ ĐẢNG.docx
NỘI DUNG HỌC THI ôn thi môn LỊCH SỬ ĐẢNG.docxNỘI DUNG HỌC THI ôn thi môn LỊCH SỬ ĐẢNG.docx
NỘI DUNG HỌC THI ôn thi môn LỊCH SỬ ĐẢNG.docx
 
ĐỀ CƯƠNG + TEST ÔN TẬP CUỐI KÌ 2 TIẾNG ANH 11 - GLOBAL SUCCESS (THEO CHUẨN MI...
ĐỀ CƯƠNG + TEST ÔN TẬP CUỐI KÌ 2 TIẾNG ANH 11 - GLOBAL SUCCESS (THEO CHUẨN MI...ĐỀ CƯƠNG + TEST ÔN TẬP CUỐI KÌ 2 TIẾNG ANH 11 - GLOBAL SUCCESS (THEO CHUẨN MI...
ĐỀ CƯƠNG + TEST ÔN TẬP CUỐI KÌ 2 TIẾNG ANH 11 - GLOBAL SUCCESS (THEO CHUẨN MI...
 
Có nên đo áp lực tĩnh mạch trung tâm để hướng dẫn việc xử trí dịch truyền ?
Có nên đo áp lực tĩnh mạch trung tâm để hướng dẫn việc xử trí dịch truyền ?Có nên đo áp lực tĩnh mạch trung tâm để hướng dẫn việc xử trí dịch truyền ?
Có nên đo áp lực tĩnh mạch trung tâm để hướng dẫn việc xử trí dịch truyền ?
 
ĐỀ CƯƠNG + TEST ÔN TẬP CUỐI KÌ 2 TIẾNG ANH 11 - GLOBAL SUCCESS (THEO CHUẨN MI...
ĐỀ CƯƠNG + TEST ÔN TẬP CUỐI KÌ 2 TIẾNG ANH 11 - GLOBAL SUCCESS (THEO CHUẨN MI...ĐỀ CƯƠNG + TEST ÔN TẬP CUỐI KÌ 2 TIẾNG ANH 11 - GLOBAL SUCCESS (THEO CHUẨN MI...
ĐỀ CƯƠNG + TEST ÔN TẬP CUỐI KÌ 2 TIẾNG ANH 11 - GLOBAL SUCCESS (THEO CHUẨN MI...
 
BỘ ĐỀ KIỂM TRA CUỐI KÌ 2 TIẾNG ANH I-LEARN SMART START LỚP 3, 4 NĂM HỌC 2023-...
BỘ ĐỀ KIỂM TRA CUỐI KÌ 2 TIẾNG ANH I-LEARN SMART START LỚP 3, 4 NĂM HỌC 2023-...BỘ ĐỀ KIỂM TRA CUỐI KÌ 2 TIẾNG ANH I-LEARN SMART START LỚP 3, 4 NĂM HỌC 2023-...
BỘ ĐỀ KIỂM TRA CUỐI KÌ 2 TIẾNG ANH I-LEARN SMART START LỚP 3, 4 NĂM HỌC 2023-...
 
Gieo quẻ kinh dịch, xin xăm,Xin lộc thánh.pdf
Gieo quẻ kinh dịch, xin xăm,Xin lộc thánh.pdfGieo quẻ kinh dịch, xin xăm,Xin lộc thánh.pdf
Gieo quẻ kinh dịch, xin xăm,Xin lộc thánh.pdf
 
GIÁO ÁN KẾ HOẠCH BÀI DẠY CÔNG NGHỆ 8 KẾT NỐI TRI THỨC - CẢ NĂM THEO CÔNG VĂN ...
GIÁO ÁN KẾ HOẠCH BÀI DẠY CÔNG NGHỆ 8 KẾT NỐI TRI THỨC - CẢ NĂM THEO CÔNG VĂN ...GIÁO ÁN KẾ HOẠCH BÀI DẠY CÔNG NGHỆ 8 KẾT NỐI TRI THỨC - CẢ NĂM THEO CÔNG VĂN ...
GIÁO ÁN KẾ HOẠCH BÀI DẠY CÔNG NGHỆ 8 KẾT NỐI TRI THỨC - CẢ NĂM THEO CÔNG VĂN ...
 
GIẢI-ĐỀ-CƯƠNG-NHẬP-MÔN-KHOA-HỌC-XÃ-HỘI-VÀ-NHÂN-VĂN-KHIÊM-BK69.pdf
GIẢI-ĐỀ-CƯƠNG-NHẬP-MÔN-KHOA-HỌC-XÃ-HỘI-VÀ-NHÂN-VĂN-KHIÊM-BK69.pdfGIẢI-ĐỀ-CƯƠNG-NHẬP-MÔN-KHOA-HỌC-XÃ-HỘI-VÀ-NHÂN-VĂN-KHIÊM-BK69.pdf
GIẢI-ĐỀ-CƯƠNG-NHẬP-MÔN-KHOA-HỌC-XÃ-HỘI-VÀ-NHÂN-VĂN-KHIÊM-BK69.pdf
 
.................KHTN 9....................................Viet Nam.......
.................KHTN 9....................................Viet Nam........................KHTN 9....................................Viet Nam.......
.................KHTN 9....................................Viet Nam.......
 
50 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
50 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...50 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
50 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
 
Giáo trình xã hội học Thể dục Thể thao hay
Giáo trình xã hội học Thể dục Thể thao hayGiáo trình xã hội học Thể dục Thể thao hay
Giáo trình xã hội học Thể dục Thể thao hay
 
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
 
VẬN DỤNG KIẾN THỨC LIÊN MÔN TRONG GIẢI BÀI TẬP ÔN THI THPTQG MÔN SINH HỌC - H...
VẬN DỤNG KIẾN THỨC LIÊN MÔN TRONG GIẢI BÀI TẬP ÔN THI THPTQG MÔN SINH HỌC - H...VẬN DỤNG KIẾN THỨC LIÊN MÔN TRONG GIẢI BÀI TẬP ÔN THI THPTQG MÔN SINH HỌC - H...
VẬN DỤNG KIẾN THỨC LIÊN MÔN TRONG GIẢI BÀI TẬP ÔN THI THPTQG MÔN SINH HỌC - H...
 

Chuong2 de qui

  • 1. NGUYỄN THỊ TÚ MI EMAIL: nttmi@hcmuaf.edu.vn ĐỆ QUI
  • 2. Nội dung Khái niệm đệ qui. Thiết kế giải thuật đệ qui
  • 3. Khái niệm đệ qui Đệ qui là một khái niệm cơ bản trong toán học và khoa học máy tính. Một đối tượng được gọi là đệ qui nếu nó hoặc một phần của nó được định nghĩa thông qua khái niệm về chính nó. Trong lĩnh vực lập trình: 1 chương trình gọi là đệ qui nếu nó gọi lại chính nó. Chương trình đệ qui luôn kiểm tra điều kiện dừng:  Nếu không thỏa, tiếp tục gọi đệ qui.  Nếu thỏa mãn  không gọi chính nó nữa, chấm dứt đệ qui.
  • 4. Khái niệm đệ qui Ví dụ:  Định nghĩa số tự nhiên:  0 là số tự nhiên.  Nếu k là số tự nhiên thì k+1 cũng là số tự nhiên.  Định nghĩa xâu kí tự (chuỗi kí tự) bằng đệ qui:  Xâu rỗng là xâu kí tự  Một chữ cái bất kì ghép với 1 xâu sẽ tạo thành xâu mới  Định nghĩa hàm giai thừa n!:  Khi n = 0, định nghĩa 0! = 1  Khi n>0, định nghĩa n! = (n-1)! * n
  • 5. Khái niệm đệ qui Ví dụ private int Factor(int n){ if (n==0) return 1; else return n*Factor(n-1); } Đặc điểm của chương trình đệ qui:  Chương trình này có thể gọi chính nó  Khi chương trình gọi chính nó thì mục đích là để giải quyết một vấn đề tương tự nhưng nhỏ hơn.  Vấn đề nhỏ hơn này một lúc nào đó sẽ đơn giản tới mức chương trình có thể tự giải quyết mà không cần phải gọi chính nó nữa.
  • 6. Khái niệm đệ qui Để xây dựng 1 chương trình đệ qui cần tồn tại 1 công thức đệ qui. Công thức này gồm 2 phần:  Phần đệ qui: recursive case  Phần cơ bản: base case Ưu điểm của chương trình đệ qui:  Có thể thực hiện một 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.  Có thể định nghĩa một tập vô hạn các đối tượng thông qua 1 số hữu hạn lời phát biểu.
  • 7. Điều kiện để viết chương trình đệ qui Vấn đề cần xử lý phải giải quyết được bằng cách đệ qui. Ngôn ngữ dùng viết chương trình phải hỗ trợ đệ qui. Các loại đệ qui:  Đệ qui trực tiếp: một hàm gọi tới chính nó  Đệ qui gián tiếp: Một hàm gọi tới hàm khác, hàm khác này gọi tới hàm bạn đầu
  • 8. Khi nào không nên sử dụng đệ qui Khi một hàm đệ qui gọi chính nó thì tập các đối tượng được sử dụng trong hàm này như: biến, hằng, cấu trúc… và các thông số cần cho việc chuyển giao điều khiển sẽ được sinh ra. Sử dụng đệ qui đôi khi tạo ra những tính toán thừa, không cần thiết do tính chất tự động gọi thực hiện thủ tục khi chưa kết thúc đệ qui. Nếu chương trình có thể viết dưới dạng lặp hoặc các cấu trúc lệnh khác thì không nên sử dụng đệ qui.
  • 9. Ví dụ Dãy Fibonaci được định nghĩa như sau:  F(0) = 0;  F(1) = 1;  Với n>1 thì F(n) = F(n-1) + F(n-2) Phương thức đệ qui để tính dãy Fibonaci int Fib(int i){ if(i==0) return 0; if(i==1) return 1; return Fib (i-1)+Fib (i-2); } Base case Recusive case
  • 10. Ví dụ Phương thức dùng vòng lặp để tính dãy Fibonaci: int Fib(int n){ int fib1=1,fib0=0, fibn, i; if(n<=1) return n; else{ for(i=2;i<=n;i++) { fibn=fib1+fib0; fib0=fib1; fib1=fibn; } return fibn; } }
  • 11. Thiết kế giải thuật đệ qui Thuật toán Euclid tính ước số chung lớn nhất của hai số nguyên dương.  Ước số chung lớn nhất của hai số nguyên dương m, n là một số k lớn nhất sao cho m và n đều chia hết cho k.  Cách giải:  Cách 1: vét cạn  Cách 2: thuật toán Euclid: giả sử m>n  USCLN (m, n) == USCLN (m mod n, n)  Ví dụ: • USCLN(108, 45) 108 chia cho 45 dư 18 • USCLN(45, 18) 45 chia cho 18 dư 9 • USCLN(18, 9) 18 chia cho 9 dư 0 • USCLN(9, 0) Kết quả USCLN của 108 và 45 là 9
  • 12. Thiết kế giải thuật đệ qui Cài đặt thuật toán: int USCLN(int m, int n){ if(n==0) return m; else return USCLN(n, m%n); }
  • 13. Giải thuật đệ qui dạng chia để trị Ý tưởng:  Phân chia bài toán thành 2 hoặc nhiều bài toán con có dạng tương tự và lần lượt giải quyết từng bài toán con này.  Các bài toán con này được coi là dạng đơn giản hơn của bài toán ban đầu. Ví dụ:  Quick sort  Bài toán tháp Hà Nội
  • 14. Bài toán tháp Hà Nội Phát biểu bài toán: có 3 chiếc cọc và bộ n đĩa. Các đĩa này có kích thước khác nhau, các đãi đều có lỗ để xuyên chúng qua đầu cọc. Ban đầu các đĩa đều nằm trên 1 cọc, trong đó đĩa nhỏ sẽ nằm trên đĩa lớn. Yêu cầu: chuyển bộ n đĩa từ cọc ban đầu A sang cọc đích C sao cho vẫn đảm bảo nguyên tắc đĩa nhỏ trên đĩa lớn dưới.
  • 15. Bài toán tháp Hà Nội
  • 16. Bài toán tháp Hà Nội Nhận xét:  Ở đây ta thấy bài toán chuyển n cọc thành bài toán đơn giản hơn là chuyển n-1 cọc.  Điểm dừng của thuật toán là n = 1, ta chuyển thẳng cọc này từ cọc ban đầu sang cọc đích.  Bài toán chuyển n đĩa được chia làm 2 bài toán nhỏ hơn là chuyển n- 1 đĩa:  Lần 1: chuyển n-1 đĩa từ cọc A sang cọc trung gian B.  Lần 2: chuyển n-1 đĩa từ cọc B sang cọc đích C. Demo
  • 17. Bài toán tháp Hà Nội Cài đặt đệ qui public void chuyen(int n, char a, char b) { System.out.println("Chuyen dia thu " + n + " tu coc " + a + " sang coc " + b); } public void thapHaNoi(int n, char a, char b, char c) { if (n == 1) { chuyen(1, a, c); } else { thapHaNoi(n-1, a, b, c); chuyen(n, a, c); thapHaNoi(n-1, b, c, a); } }
  • 18. Giải thuật đệ qui dạng quay lui Ý tưởng  Các thuật toán thường có 1 qui tắc tính toán nào đó nhưng có những vấn đề không tuân theo qui tắc nào hết dùng thử sai (trial-and-error) để giải quyết.  Đặc điểm của dạng toán này là:  Không thể dùng biện pháp phân tích  Phải dùng phương pháp tính toán thủ công với sự kiên trì và độ chính xác cao.  Quá trình thử sai sẽ được thực hiện trên các bài toán đơn giản hơn.  Thường được mô tả dưới dạng đệ qui và liên quan đến việc giải quyết 1 số hữu hạn bài toán con. Ví dụ:  Tám quân hậu  Mã đi tuần
  • 19. Bài toán 8 quân hậu Là một ví dụ nổi tiếng của việc sử dụng phương pháp thử sai & thuật toán quay lui. Phát biểu: Tìm cách đặt 8 quân hậu trên 1 bàn cờ mà không có 2 quân hậu nào có thể ăn được nhau. i j Ω
  • 20. Bài toán 8 quân hậu Bài toán 8 quân hậu (mô phỏng) Ω1 Ω2 Ω3 Ω4 Ω5 Ω6 Ω7 Ω8 1 2 3 4 5 6 7 8 8 7 6 5 4 3 2 1
  • 21. Bài toán 8 quân hậu Bài toán 8 quân hậu (mô phỏng) Ω1 Ω2 Ω3 Ω4 Ω5 Ω6 Ω7 Ω8 1 2 3 4 5 6 7 8 8 7 6 5 4 3 2 1 Ω1 Ω2 Ω3 Ω4 Ω5 Ω6 Ω7
  • 22. Bài toán 8 quân hậu Bài toán 8 quân hậu (mô phỏng) Ω1 Ω2 Ω3 Ω4 Ω5 Ω6 Ω7 Ω8 1 2 3 4 5 6 7 8 8 7 6 5 4 3 2 1 Ω7 Ω6 Ω5 Ω5 Ω4
  • 23. Bài toán 8 quân hậu Bài toán 8 quân hậu (mô phỏng) Ω1 Ω2 Ω3 Ω8 1 2 3 4 5 6 7 8 8 7 6 5 4 3 2 1 Ω7 Ω6 Ω5 Ω4 Ω5 Ω6 Ω7
  • 24. Bài toán 8 quân hậu Bài toán 8 quân hậu (mô phỏng) Ω1 Ω2 Ω3 Ω8 1 2 3 4 5 6 7 8 8 7 6 5 4 3 2 1 Ω7 Ω6 Ω5 Ω4 Ω5 Ω6 Ω7 Ω5 Ω4
  • 25. Bài toán 8 quân hậu Bài toán 8 quân hậu Ω Ω Ω Ω Ω Ω Ω Ω Ω1 Ω2 Ω3 Ω4 Ω5 Ω6 Ω7 Ω8
  • 26. Bài toán 8 quân hậu void datHau(int i){ Khởi tạo danh sách các vị trí có thể đặt quân hậu tiếp theo; do{ Lựa chọn vị trí đặt quân hậu tiếp theo; if Vị trí đặt an toàn{ Đặt hậu; if i<8{ datHau(i+1); if Không thành côngBỏ hậu đã đặt ra khỏi vị trí } } } while(Không thành công)&&(Vẫn còn lựa chọn) }
  • 27. Tóm tắt Chương này chúng ta cần nắm vững các vấn đề sau:  Định ngĩa bằng đệ qui  Chương trình đệ qui  Ưu điểm và khuyết điểm của đệ qui  Khi nào không nên sử dụng đệ qui  Các dạng đệ qui và ví dụ:  Chia để trị  Quay lui
  • 28. Bài tập Bài 1: Một chương trình đệ qui khi gọi chính nó thì kích thước như thế nào so với bài toán ban đầu? Làm thế nào để tránh lặp vô hạn? Bài 2: Viết chương trình đệ qui tính tổng số lẻ trong khoảng 1 đến 2n+1. Bài 3: Bài toán hoán vị. Bài 4: Bài toán tháp Hà Nội. Bài 5: Bài toán 8 quân hậu. Bài 6: Bài toán mã đi tuần.