Bài giảng Kỹ thuật lập trình nâng cao - Chương 3: Lập trình đệ quy - Dương Thành Phết

1. KHÁI NIỆM

 Một hàm được gọi có tính đệ qui nếu trong thân của

hàm đó có lệnh gọi lại chính nó một cách tường

minh hay tiềm ẩn.

 Phân loại đệ qui

 Đệ qui tuyến tính.

 Đệ qui nhị phân.

 Đệ qui phi tuyến.

 Đệ qui hỗ tương.

pdf 14 trang yennguyen 2260
Bạn đang xem tài liệu "Bài giảng Kỹ thuật lập trình nâng cao - Chương 3: Lập trình đệ quy - Dương Thành Phết", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

Tóm tắt nội dung tài liệu: Bài giảng Kỹ thuật lập trình nâng cao - Chương 3: Lập trình đệ quy - Dương Thành Phết

Bài giảng Kỹ thuật lập trình nâng cao - Chương 3: Lập trình đệ quy - Dương Thành Phết
Chƣơng 3 
LẬP TRÌNH ĐỆ QUI 
KỸ THUẬT LẬP TRÌNH NÂNG CAO 
TRƢỜNG CAO ĐẲNG CNTT TP.HCM 
KHOA CÔNG NGHỆ THÔNG TIN 
Giảng Viên: ThS. Dƣơng Thành Phết 
Email: phetcm@gmail.com 
Website:  
Tel: 0918158670 – facebook.com/DuongThanhPhet 
1. KHÁI NIỆM 
 Một hàm được gọi có tính đệ qui nếu trong thân của 
hàm đó có lệnh gọi lại chính nó một cách tường 
minh hay tiềm ẩn. 
 Phân loại đệ qui 
 Đệ qui tuyến tính. 
 Đệ qui nhị phân. 
 Đệ qui phi tuyến. 
 Đệ qui hỗ tương. 
2 
2. ĐỆ QUI TUYẾN TÍNH 
Trong thân hàm có duy nhất một lời gọi hàm gọi lại chính 
nó một cách tường minh. 
3 
 TenHam () 
{ 
 if (điều kiện dừng) 
 //Trả về giá trị hay kết thúc công việc 
 //Thực hiện một số công việc (nếu có) 
 TenHam (); 
 //Thực hiện một số công việc (nếu có) 
} 
long TongS (int n) 
{ 
 if(n==0) 
 return 0; 
 return ( TongS(n-1) + n ); 
} 
nnS 321)(
4 
Ví dụ: Tính 
- Điều kiện dừng: S(0) = 0. 
- Qui tắc (công thức) tính: S(n) = S(n-1) + n. 
2. ĐỆ QUI TUYẾN TÍNH 
3. ĐỆ QUI NHỊ PHÂN 
 TenHam () 
{ 
 if (điều kiện dừng) 
 //Trả về giá trị hay kết thúc công việc 
 //Thực hiện một số công việc (nếu có) 
 .TenHam (); 
 //Thực hiện một số công việc (nếu có) 
 . . . TenHam (); 
 //Giải quyết vấn đề còn lại 
 //Thực hiện một số công việc (nếu có) 
} 
 5 
Trong thân của hàm có hai lời gọi hàm gọi lại chính nó một 
cách tường minh. 
Ví dụ: Tính số hạng thứ n của dãy Fibonaci được định nghĩa 
như sau: 
f1 = f0 =1 ; 
fn = fn-1 + fn-2 ; (n>1) 
Điều kiện dừng: f(0) = f(1) = 1. 
6 
long Fibonaci (int n) 
{ 
 if(n==0 || n==1) 
 return 1; 
 return Fibonaci(n-1) + 
Fibonaci(n-2); 
} 
3. ĐỆ QUI NHỊ PHÂN 
4. ĐỆ QUI PHI TUYẾN 
 TenHam () 
{ 
 for (int i = 1; i<=n; i++) 
 { 
 //Thực hiện một số công việc (nếu có) 
 if (điều kiện dừng) 
 //Trả về giá trị hay kết thúc công việc 
 else 
 { 
 //Thực hiện một số công việc (nếu có) 
 TenHam (); 
 } 
 } 
} 7 
Trong thân của hàm có lời gọi hàm gọi lại chính nó được 
đặt bên trong vòng lặp. 
Ví dụ: Tính số hạng thứ n của dãy {Xn} được định nghĩa 
như sau: 
 X0 =1 ; 
 Xn = n
2X0 + (n-1)
2X1 +  + 1
2Xn-1 ; (n≥1) 
Điều kiện dừng:X(0) = 1. 
8 
4. ĐỆ QUI PHI TUYẾN 
long TinhXn (int n) 
{ 
 if(n==0) 
 return 1; 
 long s = 0; 
 for (int i=1; i<=n; i++) 
 s = s + i * i * TinhXn(n-i); 
 return s; 
} 
Trong thân của hàm này có lời gọi hàm đến hàm kia và 
trong thân của hàm kia có lời gọi hàm tới hàm này. 
g()
f()
h()
f()
f() g()
9 
5. ĐỆ QUI TƢƠNG HỖ 
 TenHam2 (); 
 TenHam1 () 
{ 
//Thực hiện một số công việc (nếu có) 
TenHam2 (); 
//Thực hiện một số công việc (nếu có) 
} 
 TenHam2 () 
{ 
//Thực hiện một số công việc (nếu có) 
TenHam1 (); 
//Thực hiện một số công việc (nếu có) 
} 
10 
5. ĐỆ QUI TƢƠNG HỖ 
11 
Ví dụ: Tính số hạng thứ n của hai dãy {Xn}, {Yn} được 
định nghĩa như sau: 
X0 =Y0 =1 ; 
Xn = Xn-1 + Yn-1; (n>0) 
Yn = n
2Xn-1 + Yn-1; (n>0) 
Điều kiện dừng:X(0) = Y(0) = 1. 
5. ĐỆ QUI TƢƠNG HỖ 
long TinhYn(int n); 
long TinhXn (int n) 
{ 
 if(n==0) 
 return 1; 
 return TinhXn(n-1) + TinhYn(n-1); 
} 
 long TinhYn (int n) 
{ 
 if(n==0) 
 return 1; 
 return n*n*TinhXn(n-1) + TinhYn(n-1); 
} 
12 
5. ĐỆ QUI TƢƠNG HỖ 
6. CÁCH HOẠT ĐỘNG HÀM ĐỆ QUI 
Ví dụ: tính n! với n=5 
5n 5n 4n 3n 2n
GiaiThua(5)main()
5 4 23 1
12624120
GiaiThua(2)GiaiThua(4) GiaiThua(3)
1n
GiaiThua(1)
13 
14 
 The End. 

File đính kèm:

  • pdfbai_giang_ky_thuat_lap_trinh_nang_cao_chuong_3_lap_trinh_de.pdf