SlideShare ist ein Scribd-Unternehmen logo
1 von 42
GIẢI THUẬT ĐỆ QUY
2
Mục tiêu
Đến cuối chương, bạn có thể:
 Giải thích được giải thuật đệ quy là gì.
 Biết cách diễn đạt 1 tác vụ hướng đệ quy.
 Biết cách hiện thực hàm đệ quy
 Phân loại được các loại đệ quy
 Giải thích được cách chạy một hàm đệ quy.
 Biết cách khử một số giải thuật đệ quy.
3
1- Đệ quy là gì (Recursion)
 Định nghĩa tường minh: Giải thích khái niệm
mới bằng những khái niệm đã có.
 Người = Động vật cấp cao.
 Định nghĩa lòng vòng: Giải thích 1 khái niệm
bằng chính khái niệm đó.
 Đệ quy: Đưa ra 1 định nghĩa có sử dụng
chính khái niệm đang cần định nghĩa( quay
về ).
 Người = con của hai người khác.
4
Đệ quy là gì?...
 Con người hiểu được định nghĩa đệ quy vì
đệ quy có chặn (điều kiện biên, điều kiện suy
biến) – có thể là biên ngầm định.
 Người = con của hai người khác  Ngầm
hiểu là có 2 người đầu tiên.
 Thư mục = các thư mục con + các tập tin 
Ngầm hiểu: Hiển nhiên tồn tại thư mục gốc là
cả ổ đĩa.
5
2- Kiểu dữ liệu đệ quy
 Một người được mô tả bằng: tên, năm sinh, cha
(một người khác), mẹ (một người khác).
struct NGUOI
{ char Ten[51];
int namsinh;
NGUOI cha;
NGUOI me;
};
Cấu trúc này không
khả thi trong máy tính
vì không thể
cấp bộ nhớ
6
Kiểu dữ liệu đệ quy...
 Sửa lại:
struct NGUOI
{ char Ten[51];
int namsinh;
NGUOI* pCha;
NGUOI* pMe;
};
NGUOI x;
Ten (51 bytes)
namsinh (2 bytes)
pCha (4 bytes)
pMe (4 butes)
x
7
3- Tác vụ đệ quy
 Có thể diễn đạt nhiều tác vụ hướng đệ quy.
 1+2+3+...+ (n-2) + (n-1) + n
 Cộng( 1 tới n) = n + Cộng (1 tới n-1)
 Điều kiện biên là điều kiện ngưng không đệ quy nữa.
 Điều kiện biên: Cộng (1 tới 1) là 1
 Cộng (1 tới n) = 1, n=1
n + Cộng (1 tới n-1)
8
4- Cách viết hàm đệ quy
 Định nghĩa tác vụ đệ quy theo ngôn ngữ tự
nhiên thế nào thì hàm cũng viết như thế.
 Thí dụ: n! = 1*2*3*4*5*... * n
n! = 1, n<=1
n* (n-1)!
9
Cách viết hàm đệ quy...
n! = 1, n<=1
n* (n-1)!
Điều kiện biên
2 dòng
2 dòng
10
Luyện tập viết hàm đệ quy
 Tìm trị phần tử thứ n của 1 cấp số cộng có
số hạng đầu là a, công sai là r
Un = a, n=1
r + Un-1
 Tìm trị phần tử thứ n của 1 cấp số nhân có
số hạng đầu là a, công bội là q
Un = a, n=1
q*Un-1
Bạn tự viết
11
Luyện tập viết hàm đệ quy
 Xuất biểu diễn nhị phân của 1 số nguyên
dương.
13  1101
Dạng nhị phân
của 6 (13/2)
13%2
Xuất dạng nhị phân của n:
Nếu (n>=0)
{ Nếu (n/2>0) Xuất dạng nhị phân của n/2;
Xuất (n%2);
}
Bạn tự viết
12
Luyện tập viết hàm đệ quy...
Viết 2 hàm xuất hệ 8, hệ 16 cho 1 số long n
13
5- Phân loại hàm đệ quy
 Tùy thuộc cách diễn đạt tác vụ đệ quy mà
có các loại đệ quy sau.
(1) Đệ quy tuyến tính.
(2) Đệ quy nhị phân.
(3) Đệ quy phi tuyến
(4) Đệ quy hỗ tương.
14
5.1-Đệ quy tuyến tính
 Thân hàm gọi 1 lần chính nó
 Un = a , n=1 ( trị thứ n của cấp số cộng)
r + Un-1 , n>1
double U (int n, double a, double r)
{
if (n==1) return a;
return r + U(n-1,a,r);
}
15
5.2-Đệ quy nhị phân
 Thân hàm gọi 2 lần chính nó.
 Chuỗi số Fibonacci: 1 1 2 3 5 8 13 ...
 Un = 1, n=1,2
Un-2 + Un-1 , n>2
long Fibo (int n)
{
if (n<=2) return 1;
return Fibo(n-2) + Fibo(n-1);
}
16
5.3 - Đệ quy phi tuyến
 Thân hàm lặp gọi 1 số lần chính nó
 Un = n , n <6
Un-5 +Un-4 + Un-3 +Un-2 +Un-1 ,n >6
long U ( int n)
{ if (n<6) return n;
long S= 0;
for (int i = 5; i>0; i--) S+= U(n-i);
return S;
17
5.4 - Đệ quy hỗ tương
 2 hàm đệ quy gọi nhau
 Un = n , n<5
Un-1 + Gn-2 , n>=5
 Gn = n-3 , n<8
Un-1 + Gn-2 , n>8
long G(int n);
long U ( int n)
{ if (n<5) return n;
return U(n-1) + G(n-2);
}
long G(int n)
{ if (n<8) return n-3;
return U(n-1) + G(n-2);
}
18
6- Kỹ thuật tìm giải thuật đệ quy
 Thông số hóa bài toán.
 Tìm các điều kiện biên(chặn), tìm giải thuật
cho các tình huống này.
 Tìm giải thuật tổng quát theo hướng đệ quy
lui dần về tình huống bị chặn.
19
Tính tổng 1 mảng a, n phần tử
 Thông số hóa: int* a, int n
 Điều kiện biên: Mảng 0 phần tử thì tổng bằng 0.
 Giải thuật chung:
Sum(a,n) = a[0] + a[1] + a[2] + ... + a[n-2] +a[n-1]
Sum(a,n-1)
Sum (a,n) = 0 , n=0
a[n-1] + Sum(a, n-1)
 Với các thuật toán đệ quy trên mảng, ta nên giảm dần
số phần tử của mảng.
20
Tìm trị lớn nhất của mảng a, n phần tử
 Thông số hóa: int*a, int n
 Điều kiện biên: Mảng 1 phần tử thì trị lớn nhất là a[0].
 Giải thuật chung:
Max(a,n) = a[0] , a[1] , a[2] , ... , a[n-2] , a[n-1]
Max(a,n-1)
Max (a,n) = a[0] , n=1
a[n-1] > Max(a, n-1)? a[n-1] : Max(a,n-1)
 Thuật toán đệ quy tìm trị nhỏ nhất của mảng?
Do yourself.
21
Xuất ngược 1 chuỗi
 S= “QWERT”  TREWQ
Ký tự đầu
của S
Kết qủa xuất ngược
chuỗi &S[1]
Xuất_ngược (S) :
L= strlen(S);
if (L>1) Xuất_ngược (S+1);
if (L) Xuất (*S);
Nghĩa là có
chuỗi con
22
Bài toán xuất ngược 1 chuỗi
23
7- Bài toán Tháp Hà Nội
A B C
24
Bài toán Tháp Hà Nội
Chuyển n đĩa từ cột X
sang cột Z nhờ cột
trung gian Y
(1) Chuyển n-1 đĩa từ cột X sang cột Y nhờ
cột trung gian Z vì các đĩa bên trên là các
đĩa nhỏ.
(2) Chuyển đĩa n (to nhất) từ cột X sang cột
đích Z.
(3) Làm lại cho n-1 đĩa còn lại đang ở cột Y
sang cột Z với X là cột trung gian.
25
Tháp Hà Nội...
3
2
1
A CB
3 2 1
32
1
3
2
1
26
8- Cách thực thi 1 hàm đệ quy
 Xét hàm tính giai thừa của 5
n: 5
Kq
n: 4
Kq
n: 3
Kq
n: 2
Kq
n: 1
Kq
27
Cách thực thi 1 hàm đệ quy
 Xét hàm tính giai thừa của 5
n: 5
Kq:
n: 4
Kq:
n: 3
Kq:
n: 2
Kq:
n: 1
Kq 1
28
Cách thực thi 1 hàm đệ quy
 Xét hàm tính giai thừa của 5
n: 5
Kq:
n: 4
Kq:
n: 3
Kq:
n: 2
Kq:
n: 1
Kq 1
n: 2
Kq: 2*1=2
29
Cách thực thi 1 hàm đệ quy
 Xét hàm tính giai thừa của 5
n: 5
Kq:
n: 4
Kq:
n: 3
Kq:
n: 2
Kq: 2
n: 3
Kq: 3*2=6
30
Cách thực thi 1 hàm đệ quy
 Xét hàm tính giai thừa của 5
n: 5
Kq:
n: 4
Kq:
n: 3
Kq: 6
n: 4
Kq: 4*6=24
31
Cách thực thi 1 hàm đệ quy
 Xét hàm tính giai thừa của 5
n: 5
Kq:
n: 4
Kq: 24
n: 5
Kq:5*24=120
32
Cách thực thi 1 hàm đệ quy
 Xét hàm tính giai thừa của 5
n: 5
Kq: 120
33
9- Nhận xét về hàm đệ quy
HÀM ĐỆ QUY: Vừa tốn bộ nhớ
vừa chạy chậm
Giải thuật đệ quy đẹp (gọn gàng), dễ chuyển
thành chương trình.
Nhiều ngôn ngữ không hỗ trợ giải thuật đệ quy
(Fortran).
Nhiều giải thuật rất dễ mô tả dạng đệ quy
nhưng lại rất khó mô tả với giải thuật không-đệ-
quy.
34
10- Khử đệ quy
 Là quá trình chuyển đổi 1 giải thuật đệ quy
thành giải thuật không đệ quy.
 Chưa có giải pháp cho việc chuyển đổi này
một cách tổng quát.
 Cách tiếp cận:
(1) Dùng quan điểm đệ quy để tìm giải thuật cho
bài toán.
(2) Mã hóa giải thuật đệ quy.
(3) Khử đệ quy để có giải thuật không-đệ-quy.
35
10.1- Khử đệ quy bằng vòng lặp
 Ý tưởng: Lưu lại các trị của các lần tính toán
trước làm dữ liệu cho việc tính toán của lần sau.
 Đi từ điều kiện biên đi tới điều kiện kết thúc.
36
Thí dụ: Hàm tính giai thừa của n
long GiaiThua( int n)
{ if (n<2) return 1;
return n * GiaiThua(n-1);
}
Trị cần lưu
long GiaiThua( int n)
{ long K=1;
for (int i =2; i<=n;i++) K=K*i;
return K;
}
Điều kiện biên
K chính là kết qủa của trị
giai thừa trước đó
37
Thí dụ hàm tính trị thứ n của dãy Fibonacci:
1 1 2 3 5 8...long Fibo(int n)
{ if (n<=2) return 1; // hai chặn
return Fibo(n-2) + Fibo (n-1);
} t
1
t
2
t3=t1+t
2
t1 t2 t3
t1 t2 t3
t1 t2 t3
long Fibo(int n)
{ if (n<=2) return 1; // hai chặn
long t1=1, t2=1;
for (int i=3; i<=n;i++)
{ t3=t1+t2;
t1=t2;
t2= t3;
}
return t3;
}
i = 3 4 5 6
38
10.2- Khử đệ quy bằng stack
 Khởi tạo stack với số phần tử phù hợp.
 Đưa bộ tham số đầu vào stack.
 Khi Stack không trống
{
- Lấy bộ tham số ra khỏi stack;
- Xử lý các tác vụ cơ bản ứng với tham
số này. Nếu gặp 1 tác vụ đệ quy thì lại đưa
bộ tham số của tác vụ đệ quy tương ứng vào
stack.
}
39
Bài toán tháp Hà Nội khử - đệ quy
Giải thuật đệ quy
40
Tóm tắt
 Hàm đệ quy là hàm mà trong thân hàm lại
gọi chính nó.
 Hàm đệ quy kém hiệu qủa vì: tốn bộ nhớ va
gọi hàm qúa nhiều lần. Tuy nhiên viết hàm
đệ quy rất ngắn gọn.
 Vòng lặp và stack là những kỹ thuật giúp khử
giải thuật đệ quy.
41
Bài tập
 Viết chương trình xuất n trị đầu tiên của 1 cấp số cộng
có số hạng đầu là a (nhập từ bàn phím), công sai r
(nhập từ bàn phím). Sử dụng kỹ thuật đệ quy để xây
dựng hàm tính trị thứ i của 1 cấp số cộng này.
 Dùng kỹ thuật đệ quy để giải phương trình f(x) trong
khoảng [a,b] với sai số epsilon.
 Gọi px là pointer của nghiệm
if (f(a).f(b)>0) return NULL (không có nghiệm)
else if (b-a <= epsilon) return &a;
else
{ c=(b+a)/2) ;
if (f(a).f(c)<=0) return Tìm nghiệm trong đoạn [a,c];
else return Tìm nghiệm trong đoạn [c,b];
}
42
Bài tập
 Viết chương trình nhập 1 mảng số int, nhập 1 trị x, tìm vị trí có
x cuối cùng trong mảng. Dùng kỹ thuật đệ quy để tìm vị trí này.
Tìm x trong a[], n : -1 nếu n<0
n-1 nếu a[n-1]=x
Tìm x trong a, n-1
 Viết chương trình nhập 1 ma trận vuông các số int , nhập 1 trị
x. Tìm vị trí <dòng,cột> có x dùng kỹ thuật đệ quy.
Tìm vị trí có x trong
ma trận m,n
NULL, nếu n<1
nếu có x trong cột cuối thì return vị trí này
nếu có x trong hàng cuối thì return vị trí này
return Tìm vị trí có x trong m,n-1

Weitere ähnliche Inhalte

Was ist angesagt?

Giáo trình Phân tích và thiết kế giải thuật - CHAP 3
Giáo trình Phân tích và thiết kế giải thuật - CHAP 3Giáo trình Phân tích và thiết kế giải thuật - CHAP 3
Giáo trình Phân tích và thiết kế giải thuật - CHAP 3Nguyễn Công Hoàng
 
Chuong 4.1 tin hieu va pho
Chuong 4.1 tin hieu va phoChuong 4.1 tin hieu va pho
Chuong 4.1 tin hieu va phothanhyu
 
Phương pháp nhánh cận
Phương pháp nhánh cậnPhương pháp nhánh cận
Phương pháp nhánh cậnDiên Vĩ
 
Giáo trình Phân tích và thiết kế giải thuật - CHAP 2
Giáo trình Phân tích và thiết kế giải thuật - CHAP 2Giáo trình Phân tích và thiết kế giải thuật - CHAP 2
Giáo trình Phân tích và thiết kế giải thuật - CHAP 2Nguyễn Công Hoàng
 
xử lý số tín hiệu -Chuong 4
xử lý số tín hiệu -Chuong 4xử lý số tín hiệu -Chuong 4
xử lý số tín hiệu -Chuong 4Ngai Hoang Van
 
Nmlt c13 con_tronangcao_in
Nmlt c13 con_tronangcao_inNmlt c13 con_tronangcao_in
Nmlt c13 con_tronangcao_inHuy Nguyễn
 
xử lý số tín hiệu -Chuong 2
xử lý số tín hiệu -Chuong 2xử lý số tín hiệu -Chuong 2
xử lý số tín hiệu -Chuong 2Ngai Hoang Van
 
Lý thuyết độ phức tạp
Lý thuyết độ phức tạp Lý thuyết độ phức tạp
Lý thuyết độ phức tạp Tran Thom
 
7007643 baitap xu_li_tin_hieu_so_6201
7007643 baitap xu_li_tin_hieu_so_62017007643 baitap xu_li_tin_hieu_so_6201
7007643 baitap xu_li_tin_hieu_so_6201mvminhdhbk
 
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
 

Was ist angesagt? (20)

Giáo trình Phân tích và thiết kế giải thuật - CHAP 3
Giáo trình Phân tích và thiết kế giải thuật - CHAP 3Giáo trình Phân tích và thiết kế giải thuật - CHAP 3
Giáo trình Phân tích và thiết kế giải thuật - CHAP 3
 
Chuong 4.1 tin hieu va pho
Chuong 4.1 tin hieu va phoChuong 4.1 tin hieu va pho
Chuong 4.1 tin hieu va pho
 
Phương pháp nhánh cận
Phương pháp nhánh cậnPhương pháp nhánh cận
Phương pháp nhánh cận
 
Tichchap
TichchapTichchap
Tichchap
 
Hệ mật mã Mcelice
Hệ mật mã MceliceHệ mật mã Mcelice
Hệ mật mã Mcelice
 
MATMAT- Chuong1
MATMAT- Chuong1MATMAT- Chuong1
MATMAT- Chuong1
 
Đệ Quy, Quay Lui, Nhánh Cận
Đệ Quy, Quay Lui, Nhánh CậnĐệ Quy, Quay Lui, Nhánh Cận
Đệ Quy, Quay Lui, Nhánh Cận
 
Giáo trình Phân tích và thiết kế giải thuật - CHAP 2
Giáo trình Phân tích và thiết kế giải thuật - CHAP 2Giáo trình Phân tích và thiết kế giải thuật - CHAP 2
Giáo trình Phân tích và thiết kế giải thuật - CHAP 2
 
Cyclic code
Cyclic codeCyclic code
Cyclic code
 
Timkiem&sapxep
Timkiem&sapxepTimkiem&sapxep
Timkiem&sapxep
 
xử lý số tín hiệu -Chuong 4
xử lý số tín hiệu -Chuong 4xử lý số tín hiệu -Chuong 4
xử lý số tín hiệu -Chuong 4
 
Nmlt c13 con_tronangcao_in
Nmlt c13 con_tronangcao_inNmlt c13 con_tronangcao_in
Nmlt c13 con_tronangcao_in
 
Thuat Toan
Thuat ToanThuat Toan
Thuat Toan
 
xử lý số tín hiệu -Chuong 2
xử lý số tín hiệu -Chuong 2xử lý số tín hiệu -Chuong 2
xử lý số tín hiệu -Chuong 2
 
Đề tài: Xây dựng bài thí nghiệm xử lý tín hiệu số trên Matlab
Đề tài: Xây dựng bài thí nghiệm xử lý tín hiệu số trên MatlabĐề tài: Xây dựng bài thí nghiệm xử lý tín hiệu số trên Matlab
Đề tài: Xây dựng bài thí nghiệm xử lý tín hiệu số trên Matlab
 
Lý thuyết độ phức tạp
Lý thuyết độ phức tạp Lý thuyết độ phức tạp
Lý thuyết độ phức tạp
 
Chuong 1
Chuong 1Chuong 1
Chuong 1
 
7007643 baitap xu_li_tin_hieu_so_6201
7007643 baitap xu_li_tin_hieu_so_62017007643 baitap xu_li_tin_hieu_so_6201
7007643 baitap xu_li_tin_hieu_so_6201
 
Đệ quy và quay lui
Đệ quy và quay luiĐệ quy và quay lui
Đệ quy và quay lui
 
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
 

Andere mochten auch

Thuật toán đồ thị
Thuật toán đồ thịThuật toán đồ thị
Thuật toán đồ thịmimosavh2000
 
[Pascal] sang tao1[v5.10]
[Pascal] sang tao1[v5.10][Pascal] sang tao1[v5.10]
[Pascal] sang tao1[v5.10]MasterCode.vn
 
Giáo trình pascal cho gv hs thpt
Giáo trình pascal cho gv hs thptGiáo trình pascal cho gv hs thpt
Giáo trình pascal cho gv hs thptTâm Phan
 
Phương pháp tham lam giải bài toán lập lịch công việc
Phương pháp tham lam giải bài toán lập lịch công việcPhương pháp tham lam giải bài toán lập lịch công việc
Phương pháp tham lam giải bài toán lập lịch công việcNguyễn Danh Thanh
 
[Pascal] sang tao2(v5.10)
[Pascal] sang tao2(v5.10)[Pascal] sang tao2(v5.10)
[Pascal] sang tao2(v5.10)MasterCode.vn
 
Sáng tạo trong thuật toán và lập trình Pascal và C#
Sáng tạo trong thuật toán và lập trình Pascal và C#Sáng tạo trong thuật toán và lập trình Pascal và C#
Sáng tạo trong thuật toán và lập trình Pascal và C#Dương Tuấn
 
Bai toan va thuat toan
Bai toan va thuat toanBai toan va thuat toan
Bai toan va thuat toanHữu Duy Duy
 
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
 
Giao an trinh_pascal_bai_tap_co_dap_an_huong_dan
Giao an trinh_pascal_bai_tap_co_dap_an_huong_danGiao an trinh_pascal_bai_tap_co_dap_an_huong_dan
Giao an trinh_pascal_bai_tap_co_dap_an_huong_danVõ Tâm Long
 

Andere mochten auch (10)

Thuật toán đồ thị
Thuật toán đồ thịThuật toán đồ thị
Thuật toán đồ thị
 
[Pascal] sang tao1[v5.10]
[Pascal] sang tao1[v5.10][Pascal] sang tao1[v5.10]
[Pascal] sang tao1[v5.10]
 
Giáo trình pascal cho gv hs thpt
Giáo trình pascal cho gv hs thptGiáo trình pascal cho gv hs thpt
Giáo trình pascal cho gv hs thpt
 
Phương pháp tham lam
Phương pháp tham lamPhương pháp tham lam
Phương pháp tham lam
 
Phương pháp tham lam giải bài toán lập lịch công việc
Phương pháp tham lam giải bài toán lập lịch công việcPhương pháp tham lam giải bài toán lập lịch công việc
Phương pháp tham lam giải bài toán lập lịch công việc
 
[Pascal] sang tao2(v5.10)
[Pascal] sang tao2(v5.10)[Pascal] sang tao2(v5.10)
[Pascal] sang tao2(v5.10)
 
Sáng tạo trong thuật toán và lập trình Pascal và C#
Sáng tạo trong thuật toán và lập trình Pascal và C#Sáng tạo trong thuật toán và lập trình Pascal và C#
Sáng tạo trong thuật toán và lập trình Pascal và C#
 
Bai toan va thuat toan
Bai toan va thuat toanBai toan va thuat toan
Bai toan va thuat toan
 
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)
 
Giao an trinh_pascal_bai_tap_co_dap_an_huong_dan
Giao an trinh_pascal_bai_tap_co_dap_an_huong_danGiao an trinh_pascal_bai_tap_co_dap_an_huong_dan
Giao an trinh_pascal_bai_tap_co_dap_an_huong_dan
 

Ähnlich wie Gt de quy_2

Chuong 2 co so phan tich do phuc tap cua giai thuat - sinh vien 2
Chuong 2   co so phan tich do phuc tap cua giai thuat - sinh vien 2Chuong 2   co so phan tich do phuc tap cua giai thuat - sinh vien 2
Chuong 2 co so phan tich do phuc tap cua giai thuat - sinh vien 2Hồ Lợi
 
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
 
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
 
Thuật toán berlekamp và đa thức chia đường tròn modulo p
Thuật toán berlekamp và đa thức chia đường tròn modulo pThuật toán berlekamp và đa thức chia đường tròn modulo p
Thuật toán berlekamp và đa thức chia đường tròn modulo pBui Loi
 
Nmlt c16 ky_thuatlaptrinhdequy_in
Nmlt c16 ky_thuatlaptrinhdequy_inNmlt c16 ky_thuatlaptrinhdequy_in
Nmlt c16 ky_thuatlaptrinhdequy_inHuy Nguyễn
 
Phân tích một số thuật toán
Phân tích một số thuật toánPhân tích một số thuật toán
Phân tích một số thuật toánHồ Lợi
 
Ctdl C05
Ctdl C05Ctdl C05
Ctdl C05giang
 
Phương pháp số và lập trình - Nội suy, Đạo hàm, Tích phân
Phương pháp số và lập trình - Nội suy, Đạo hàm, Tích phânPhương pháp số và lập trình - Nội suy, Đạo hàm, Tích phân
Phương pháp số và lập trình - Nội suy, Đạo hàm, Tích phânHajunior9x
 
Nhị thức newton và Phương pháp giải các bài tập về Nhị thức newton
Nhị thức newton và Phương pháp giải các bài tập về Nhị thức newtonNhị thức newton và Phương pháp giải các bài tập về Nhị thức newton
Nhị thức newton và Phương pháp giải các bài tập về Nhị thức newtonLinh Nguyễn
 
BoiDuongHSGTin_DuyetToanBoVaCacPhuongPhapCaiTien.pptx
BoiDuongHSGTin_DuyetToanBoVaCacPhuongPhapCaiTien.pptxBoiDuongHSGTin_DuyetToanBoVaCacPhuongPhapCaiTien.pptx
BoiDuongHSGTin_DuyetToanBoVaCacPhuongPhapCaiTien.pptxHongNgcCnh2
 
Bai thi Nghiem ky thuat dien tu
Bai thi Nghiem ky thuat dien tuBai thi Nghiem ky thuat dien tu
Bai thi Nghiem ky thuat dien tuBrand Xanh
 
ThiếT Kế Và đáNh Giá ThuậT ToáN
ThiếT Kế Và đáNh Giá ThuậT ToáNThiếT Kế Và đáNh Giá ThuậT ToáN
ThiếT Kế Và đáNh Giá ThuậT ToáNguest717ec2
 
Bai tap lap trinh
Bai tap lap trinhBai tap lap trinh
Bai tap lap trinhHồ Lợi
 
Thuchanh Ktdk-matlab
Thuchanh Ktdk-matlabThuchanh Ktdk-matlab
Thuchanh Ktdk-matlabmark
 

Ähnlich wie Gt de quy_2 (20)

Chuong 2 co so phan tich do phuc tap cua giai thuat - sinh vien 2
Chuong 2   co so phan tich do phuc tap cua giai thuat - sinh vien 2Chuong 2   co so phan tich do phuc tap cua giai thuat - sinh vien 2
Chuong 2 co so phan tich do phuc tap cua giai thuat - sinh vien 2
 
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
 
Quy hoạch động
Quy hoạch độngQuy hoạch động
Quy hoạch động
 
Quy Hoach Dong
Quy Hoach DongQuy Hoach Dong
Quy Hoach Dong
 
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)
 
Thuật toán berlekamp và đa thức chia đường tròn modulo p
Thuật toán berlekamp và đa thức chia đường tròn modulo pThuật toán berlekamp và đa thức chia đường tròn modulo p
Thuật toán berlekamp và đa thức chia đường tròn modulo p
 
Nmlt c16 ky_thuatlaptrinhdequy_in
Nmlt c16 ky_thuatlaptrinhdequy_inNmlt c16 ky_thuatlaptrinhdequy_in
Nmlt c16 ky_thuatlaptrinhdequy_in
 
Pt04 de qui
Pt04 de quiPt04 de qui
Pt04 de qui
 
Thuat Toan 2
Thuat Toan 2Thuat Toan 2
Thuat Toan 2
 
Phân tích một số thuật toán
Phân tích một số thuật toánPhân tích một số thuật toán
Phân tích một số thuật toán
 
Ctdl C05
Ctdl C05Ctdl C05
Ctdl C05
 
Phương pháp số và lập trình - Nội suy, Đạo hàm, Tích phân
Phương pháp số và lập trình - Nội suy, Đạo hàm, Tích phânPhương pháp số và lập trình - Nội suy, Đạo hàm, Tích phân
Phương pháp số và lập trình - Nội suy, Đạo hàm, Tích phân
 
Chuong2 de qui
Chuong2 de quiChuong2 de qui
Chuong2 de qui
 
Nhị thức newton và Phương pháp giải các bài tập về Nhị thức newton
Nhị thức newton và Phương pháp giải các bài tập về Nhị thức newtonNhị thức newton và Phương pháp giải các bài tập về Nhị thức newton
Nhị thức newton và Phương pháp giải các bài tập về Nhị thức newton
 
BoiDuongHSGTin_DuyetToanBoVaCacPhuongPhapCaiTien.pptx
BoiDuongHSGTin_DuyetToanBoVaCacPhuongPhapCaiTien.pptxBoiDuongHSGTin_DuyetToanBoVaCacPhuongPhapCaiTien.pptx
BoiDuongHSGTin_DuyetToanBoVaCacPhuongPhapCaiTien.pptx
 
Bai thi Nghiem ky thuat dien tu
Bai thi Nghiem ky thuat dien tuBai thi Nghiem ky thuat dien tu
Bai thi Nghiem ky thuat dien tu
 
ThiếT Kế Và đáNh Giá ThuậT ToáN
ThiếT Kế Và đáNh Giá ThuậT ToáNThiếT Kế Và đáNh Giá ThuậT ToáN
ThiếT Kế Và đáNh Giá ThuậT ToáN
 
Bai tap lap trinh
Bai tap lap trinhBai tap lap trinh
Bai tap lap trinh
 
Thuchanh Ktdk-matlab
Thuchanh Ktdk-matlabThuchanh Ktdk-matlab
Thuchanh Ktdk-matlab
 

Mehr von Hoa Cỏ May (20)

Baitap dongbo.bdf
Baitap dongbo.bdfBaitap dongbo.bdf
Baitap dongbo.bdf
 
Exception 3
Exception 3Exception 3
Exception 3
 
Itp th de02
Itp th de02Itp th de02
Itp th de02
 
Ex chapter 7
Ex chapter 7Ex chapter 7
Ex chapter 7
 
Ex chapter 6
Ex chapter 6Ex chapter 6
Ex chapter 6
 
Ex chapter 5
Ex chapter 5Ex chapter 5
Ex chapter 5
 
Ex chapter 4
Ex chapter 4Ex chapter 4
Ex chapter 4
 
Ex chapter 3
Ex chapter 3Ex chapter 3
Ex chapter 3
 
Ex chapter 2
Ex chapter 2Ex chapter 2
Ex chapter 2
 
86227349 giao-trinh-lap-trinh-c
86227349 giao-trinh-lap-trinh-c86227349 giao-trinh-lap-trinh-c
86227349 giao-trinh-lap-trinh-c
 
Bt word 3
Bt word 3Bt word 3
Bt word 3
 
Bt word 2
Bt word 2Bt word 2
Bt word 2
 
Bt word 1
Bt word 1Bt word 1
Bt word 1
 
Bai tapwindows 2
Bai tapwindows 2Bai tapwindows 2
Bai tapwindows 2
 
Bai tap ppt
Bai tap pptBai tap ppt
Bai tap ppt
 
Tai lieu 02_-_phieu_bai_tap_th07_
Tai lieu 02_-_phieu_bai_tap_th07_Tai lieu 02_-_phieu_bai_tap_th07_
Tai lieu 02_-_phieu_bai_tap_th07_
 
Phan phoi ct tin hoc thpt 2011 2012
Phan phoi ct tin hoc thpt 2011 2012Phan phoi ct tin hoc thpt 2011 2012
Phan phoi ct tin hoc thpt 2011 2012
 
Lecture05
Lecture05Lecture05
Lecture05
 
Lecture04
Lecture04Lecture04
Lecture04
 
Lecture03
Lecture03Lecture03
Lecture03
 

Gt de quy_2

  • 2. 2 Mục tiêu Đến cuối chương, bạn có thể:  Giải thích được giải thuật đệ quy là gì.  Biết cách diễn đạt 1 tác vụ hướng đệ quy.  Biết cách hiện thực hàm đệ quy  Phân loại được các loại đệ quy  Giải thích được cách chạy một hàm đệ quy.  Biết cách khử một số giải thuật đệ quy.
  • 3. 3 1- Đệ quy là gì (Recursion)  Định nghĩa tường minh: Giải thích khái niệm mới bằng những khái niệm đã có.  Người = Động vật cấp cao.  Định nghĩa lòng vòng: Giải thích 1 khái niệm bằng chính khái niệm đó.  Đệ quy: Đưa ra 1 định nghĩa có sử dụng chính khái niệm đang cần định nghĩa( quay về ).  Người = con của hai người khác.
  • 4. 4 Đệ quy là gì?...  Con người hiểu được định nghĩa đệ quy vì đệ quy có chặn (điều kiện biên, điều kiện suy biến) – có thể là biên ngầm định.  Người = con của hai người khác  Ngầm hiểu là có 2 người đầu tiên.  Thư mục = các thư mục con + các tập tin  Ngầm hiểu: Hiển nhiên tồn tại thư mục gốc là cả ổ đĩa.
  • 5. 5 2- Kiểu dữ liệu đệ quy  Một người được mô tả bằng: tên, năm sinh, cha (một người khác), mẹ (một người khác). struct NGUOI { char Ten[51]; int namsinh; NGUOI cha; NGUOI me; }; Cấu trúc này không khả thi trong máy tính vì không thể cấp bộ nhớ
  • 6. 6 Kiểu dữ liệu đệ quy...  Sửa lại: struct NGUOI { char Ten[51]; int namsinh; NGUOI* pCha; NGUOI* pMe; }; NGUOI x; Ten (51 bytes) namsinh (2 bytes) pCha (4 bytes) pMe (4 butes) x
  • 7. 7 3- Tác vụ đệ quy  Có thể diễn đạt nhiều tác vụ hướng đệ quy.  1+2+3+...+ (n-2) + (n-1) + n  Cộng( 1 tới n) = n + Cộng (1 tới n-1)  Điều kiện biên là điều kiện ngưng không đệ quy nữa.  Điều kiện biên: Cộng (1 tới 1) là 1  Cộng (1 tới n) = 1, n=1 n + Cộng (1 tới n-1)
  • 8. 8 4- Cách viết hàm đệ quy  Định nghĩa tác vụ đệ quy theo ngôn ngữ tự nhiên thế nào thì hàm cũng viết như thế.  Thí dụ: n! = 1*2*3*4*5*... * n n! = 1, n<=1 n* (n-1)!
  • 9. 9 Cách viết hàm đệ quy... n! = 1, n<=1 n* (n-1)! Điều kiện biên 2 dòng 2 dòng
  • 10. 10 Luyện tập viết hàm đệ quy  Tìm trị phần tử thứ n của 1 cấp số cộng có số hạng đầu là a, công sai là r Un = a, n=1 r + Un-1  Tìm trị phần tử thứ n của 1 cấp số nhân có số hạng đầu là a, công bội là q Un = a, n=1 q*Un-1 Bạn tự viết
  • 11. 11 Luyện tập viết hàm đệ quy  Xuất biểu diễn nhị phân của 1 số nguyên dương. 13  1101 Dạng nhị phân của 6 (13/2) 13%2 Xuất dạng nhị phân của n: Nếu (n>=0) { Nếu (n/2>0) Xuất dạng nhị phân của n/2; Xuất (n%2); } Bạn tự viết
  • 12. 12 Luyện tập viết hàm đệ quy... Viết 2 hàm xuất hệ 8, hệ 16 cho 1 số long n
  • 13. 13 5- Phân loại hàm đệ quy  Tùy thuộc cách diễn đạt tác vụ đệ quy mà có các loại đệ quy sau. (1) Đệ quy tuyến tính. (2) Đệ quy nhị phân. (3) Đệ quy phi tuyến (4) Đệ quy hỗ tương.
  • 14. 14 5.1-Đệ quy tuyến tính  Thân hàm gọi 1 lần chính nó  Un = a , n=1 ( trị thứ n của cấp số cộng) r + Un-1 , n>1 double U (int n, double a, double r) { if (n==1) return a; return r + U(n-1,a,r); }
  • 15. 15 5.2-Đệ quy nhị phân  Thân hàm gọi 2 lần chính nó.  Chuỗi số Fibonacci: 1 1 2 3 5 8 13 ...  Un = 1, n=1,2 Un-2 + Un-1 , n>2 long Fibo (int n) { if (n<=2) return 1; return Fibo(n-2) + Fibo(n-1); }
  • 16. 16 5.3 - Đệ quy phi tuyến  Thân hàm lặp gọi 1 số lần chính nó  Un = n , n <6 Un-5 +Un-4 + Un-3 +Un-2 +Un-1 ,n >6 long U ( int n) { if (n<6) return n; long S= 0; for (int i = 5; i>0; i--) S+= U(n-i); return S;
  • 17. 17 5.4 - Đệ quy hỗ tương  2 hàm đệ quy gọi nhau  Un = n , n<5 Un-1 + Gn-2 , n>=5  Gn = n-3 , n<8 Un-1 + Gn-2 , n>8 long G(int n); long U ( int n) { if (n<5) return n; return U(n-1) + G(n-2); } long G(int n) { if (n<8) return n-3; return U(n-1) + G(n-2); }
  • 18. 18 6- Kỹ thuật tìm giải thuật đệ quy  Thông số hóa bài toán.  Tìm các điều kiện biên(chặn), tìm giải thuật cho các tình huống này.  Tìm giải thuật tổng quát theo hướng đệ quy lui dần về tình huống bị chặn.
  • 19. 19 Tính tổng 1 mảng a, n phần tử  Thông số hóa: int* a, int n  Điều kiện biên: Mảng 0 phần tử thì tổng bằng 0.  Giải thuật chung: Sum(a,n) = a[0] + a[1] + a[2] + ... + a[n-2] +a[n-1] Sum(a,n-1) Sum (a,n) = 0 , n=0 a[n-1] + Sum(a, n-1)  Với các thuật toán đệ quy trên mảng, ta nên giảm dần số phần tử của mảng.
  • 20. 20 Tìm trị lớn nhất của mảng a, n phần tử  Thông số hóa: int*a, int n  Điều kiện biên: Mảng 1 phần tử thì trị lớn nhất là a[0].  Giải thuật chung: Max(a,n) = a[0] , a[1] , a[2] , ... , a[n-2] , a[n-1] Max(a,n-1) Max (a,n) = a[0] , n=1 a[n-1] > Max(a, n-1)? a[n-1] : Max(a,n-1)  Thuật toán đệ quy tìm trị nhỏ nhất của mảng? Do yourself.
  • 21. 21 Xuất ngược 1 chuỗi  S= “QWERT”  TREWQ Ký tự đầu của S Kết qủa xuất ngược chuỗi &S[1] Xuất_ngược (S) : L= strlen(S); if (L>1) Xuất_ngược (S+1); if (L) Xuất (*S); Nghĩa là có chuỗi con
  • 22. 22 Bài toán xuất ngược 1 chuỗi
  • 23. 23 7- Bài toán Tháp Hà Nội A B C
  • 24. 24 Bài toán Tháp Hà Nội Chuyển n đĩa từ cột X sang cột Z nhờ cột trung gian Y (1) Chuyển n-1 đĩa từ cột X sang cột Y nhờ cột trung gian Z vì các đĩa bên trên là các đĩa nhỏ. (2) Chuyển đĩa n (to nhất) từ cột X sang cột đích Z. (3) Làm lại cho n-1 đĩa còn lại đang ở cột Y sang cột Z với X là cột trung gian.
  • 25. 25 Tháp Hà Nội... 3 2 1 A CB 3 2 1 32 1 3 2 1
  • 26. 26 8- Cách thực thi 1 hàm đệ quy  Xét hàm tính giai thừa của 5 n: 5 Kq n: 4 Kq n: 3 Kq n: 2 Kq n: 1 Kq
  • 27. 27 Cách thực thi 1 hàm đệ quy  Xét hàm tính giai thừa của 5 n: 5 Kq: n: 4 Kq: n: 3 Kq: n: 2 Kq: n: 1 Kq 1
  • 28. 28 Cách thực thi 1 hàm đệ quy  Xét hàm tính giai thừa của 5 n: 5 Kq: n: 4 Kq: n: 3 Kq: n: 2 Kq: n: 1 Kq 1 n: 2 Kq: 2*1=2
  • 29. 29 Cách thực thi 1 hàm đệ quy  Xét hàm tính giai thừa của 5 n: 5 Kq: n: 4 Kq: n: 3 Kq: n: 2 Kq: 2 n: 3 Kq: 3*2=6
  • 30. 30 Cách thực thi 1 hàm đệ quy  Xét hàm tính giai thừa của 5 n: 5 Kq: n: 4 Kq: n: 3 Kq: 6 n: 4 Kq: 4*6=24
  • 31. 31 Cách thực thi 1 hàm đệ quy  Xét hàm tính giai thừa của 5 n: 5 Kq: n: 4 Kq: 24 n: 5 Kq:5*24=120
  • 32. 32 Cách thực thi 1 hàm đệ quy  Xét hàm tính giai thừa của 5 n: 5 Kq: 120
  • 33. 33 9- Nhận xét về hàm đệ quy HÀM ĐỆ QUY: Vừa tốn bộ nhớ vừa chạy chậm Giải thuật đệ quy đẹp (gọn gàng), dễ chuyển thành chương trình. Nhiều ngôn ngữ không hỗ trợ giải thuật đệ quy (Fortran). Nhiều giải thuật rất dễ mô tả dạng đệ quy nhưng lại rất khó mô tả với giải thuật không-đệ- quy.
  • 34. 34 10- Khử đệ quy  Là quá trình chuyển đổi 1 giải thuật đệ quy thành giải thuật không đệ quy.  Chưa có giải pháp cho việc chuyển đổi này một cách tổng quát.  Cách tiếp cận: (1) Dùng quan điểm đệ quy để tìm giải thuật cho bài toán. (2) Mã hóa giải thuật đệ quy. (3) Khử đệ quy để có giải thuật không-đệ-quy.
  • 35. 35 10.1- Khử đệ quy bằng vòng lặp  Ý tưởng: Lưu lại các trị của các lần tính toán trước làm dữ liệu cho việc tính toán của lần sau.  Đi từ điều kiện biên đi tới điều kiện kết thúc.
  • 36. 36 Thí dụ: Hàm tính giai thừa của n long GiaiThua( int n) { if (n<2) return 1; return n * GiaiThua(n-1); } Trị cần lưu long GiaiThua( int n) { long K=1; for (int i =2; i<=n;i++) K=K*i; return K; } Điều kiện biên K chính là kết qủa của trị giai thừa trước đó
  • 37. 37 Thí dụ hàm tính trị thứ n của dãy Fibonacci: 1 1 2 3 5 8...long Fibo(int n) { if (n<=2) return 1; // hai chặn return Fibo(n-2) + Fibo (n-1); } t 1 t 2 t3=t1+t 2 t1 t2 t3 t1 t2 t3 t1 t2 t3 long Fibo(int n) { if (n<=2) return 1; // hai chặn long t1=1, t2=1; for (int i=3; i<=n;i++) { t3=t1+t2; t1=t2; t2= t3; } return t3; } i = 3 4 5 6
  • 38. 38 10.2- Khử đệ quy bằng stack  Khởi tạo stack với số phần tử phù hợp.  Đưa bộ tham số đầu vào stack.  Khi Stack không trống { - Lấy bộ tham số ra khỏi stack; - Xử lý các tác vụ cơ bản ứng với tham số này. Nếu gặp 1 tác vụ đệ quy thì lại đưa bộ tham số của tác vụ đệ quy tương ứng vào stack. }
  • 39. 39 Bài toán tháp Hà Nội khử - đệ quy Giải thuật đệ quy
  • 40. 40 Tóm tắt  Hàm đệ quy là hàm mà trong thân hàm lại gọi chính nó.  Hàm đệ quy kém hiệu qủa vì: tốn bộ nhớ va gọi hàm qúa nhiều lần. Tuy nhiên viết hàm đệ quy rất ngắn gọn.  Vòng lặp và stack là những kỹ thuật giúp khử giải thuật đệ quy.
  • 41. 41 Bài tập  Viết chương trình xuất n trị đầu tiên của 1 cấp số cộng có số hạng đầu là a (nhập từ bàn phím), công sai r (nhập từ bàn phím). Sử dụng kỹ thuật đệ quy để xây dựng hàm tính trị thứ i của 1 cấp số cộng này.  Dùng kỹ thuật đệ quy để giải phương trình f(x) trong khoảng [a,b] với sai số epsilon.  Gọi px là pointer của nghiệm if (f(a).f(b)>0) return NULL (không có nghiệm) else if (b-a <= epsilon) return &a; else { c=(b+a)/2) ; if (f(a).f(c)<=0) return Tìm nghiệm trong đoạn [a,c]; else return Tìm nghiệm trong đoạn [c,b]; }
  • 42. 42 Bài tập  Viết chương trình nhập 1 mảng số int, nhập 1 trị x, tìm vị trí có x cuối cùng trong mảng. Dùng kỹ thuật đệ quy để tìm vị trí này. Tìm x trong a[], n : -1 nếu n<0 n-1 nếu a[n-1]=x Tìm x trong a, n-1  Viết chương trình nhập 1 ma trận vuông các số int , nhập 1 trị x. Tìm vị trí <dòng,cột> có x dùng kỹ thuật đệ quy. Tìm vị trí có x trong ma trận m,n NULL, nếu n<1 nếu có x trong cột cuối thì return vị trí này nếu có x trong hàng cuối thì return vị trí này return Tìm vị trí có x trong m,n-1