Bài giảng Kỹ thuật lập trình - Chương 6: Kỹ thuật đệ quy. Chương này cung cấp cho học viên những nội dung về: mô tả đệ quy; trạng thái hệ thống khi tính giai thừa; thành phần của mô tả đệ quy; phân loại đệ quy; đệ quy tuyến tính; đệ quy nhị phân; đệ quy phi tuyến;... Mời các bạn cùng tham khảo chi tiết nội dung bài giảng!
Kỹ thuật đệ quy Nhắc lại kỹ thuật Đệ quy Recursive Mô tả đệ quy Recursive Mô tả theo cách phân tích đối tượng thành nhiều thành phần mà số thành phần có thành phần mang tính chất đối tượng mơ tả Mơ tả đối tượng thơng qua Ví dụ Mơ tả đệ quy tập số tự nhiên N Số số tự nhiên (1-N) Số tự nhiên số tự nhiên cộng Mô tả đệ quy cấu trúc danh sách kiểu T Cấu trúc rỗng danh sách kiểu T Ghép nối thành phần kiểu T (nút kiểu T) với danh sách kiểu T ta có danh sách kiểu T Mơ tả đệ quy gia phả Gia phả người bao gồm người gia phả cha gia phả mẹ Ví dụ Tính giai thừa n Định nghĩa không đệ quy n! n! = n * (n-1) * … * Định nghĩa đệ quy: n! = n=0 n * (n-1)! n>0 Mã C++ int factorial(int n) { if (n==0) return 1; else return (n * factorial(n - 1)); } Thực tính giai thừa factorial (3) n=3 factorial (2) … n=2 3*factorial(2) … factorial (1) n=1 2*factorial(1) … factorial (0) 1*factorial(0) n=0 … return 1; 1 Trạng thái hệ thống tính giai thừa Stack hệ thống factorial(0) factorial(1) factorial(1) factorial(1) factorial(2) factorial(2) factorial(2) factorial(2) factorial(2) factorial(3) factorial(3) factorial(3) factorial(3) factorial(3) factorial(3) factorial(3) t Thời gian hệ thống Gọi hàm Gọi hàm factorial(3) factorial(2) Trả từ Gọi hàm Gọi hàm hàm factorial(1) factorial(0) factorial(0 ) Trả từ hàm factorial(1 ) Trả từ hàm factorial(2 ) Trả từ hàm factorial(3 ) t Thành phần mô tả đệ quy ▪ Phần neo: trường hợp suy biến đối tượng ▫ Ví dụ: số tự nhiên, cấu trúc rỗng danh sách kiểu T, 0!=1, SM (a[x:x]) thao tác rỗng ▪ Phần qui nạp: mô tả đối tượng (giải thuật) thơng qua đối tượng (giải thuật) cách trực tiếp gián tiếp Ví dụ: ▫ n! = n * (n –1)! ▫ SM (a[m:n]) ≡Merge (SM (a[m:( m+n) div 2] , SM (a[(m+n) div +1 : n]) ) Phân loại đệ quy Đệ quy trực tiếp ▸Đệ quy tuyến tính ▸Đê qui nhị phân ▸Đệ quy phi tuyến Đệ quy gián tiếp ▸Đệ quy hỗ tương Đệ quy tuyến tính ▪ Là đệ quy có dạng KieuDuLieu TenHam(Thamso) { if(Dieu Kien Dung) { ; return Gia tri tra ve; } ; TenHam(Thamso) ; } P( ) { If (B) thực S; else { thực S* ; gọi P } } Với S , S* thao tác không đệ quy ▪ VD: Hàm FAC(n) tính số hạng n dãy n! int FAC( int n ) { if ( n == ) return ; else return ( n * FAC(n-1 )) ; } ...Nhắc lại kỹ thuật Đệ quy Recursive Mô tả đệ quy Recursive Mơ tả theo cách phân tích đối tượng thành nhiều thành phần mà số thành phần có thành phần mang tính chất đối tượng... quy Đệ quy trực tiếp ? ?Đệ quy tuyến tính ▸Đê qui nhị phân ? ?Đệ quy phi tuyến Đệ quy gián tiếp ? ?Đệ quy hỗ tương Đệ quy tuyến tính ▪ Là đệ quy có dạng KieuDuLieu TenHam(Thamso) { if(Dieu Kien Dung)... Gọi hàm Gọi hàm factorial(3) factorial(2) Trả từ Gọi hàm Gọi hàm hàm factorial(1) factorial(0) factorial(0 ) Trả từ hàm factorial(1 ) Trả từ hàm factorial(2 ) Trả từ hàm factorial(3 ) t Thành