Kĩ thuật lập trình Đệ Quy

11 11 0
Kĩ thuật lập trình Đệ Quy

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Kĩ thuật lập trình Đệ Quy Một hàm được gọi là đệ quy nếu bên trong thân của hàm đó có lời gọi hàm lại chính nó một cách trực tiếp hay gián tiếp. Phân tích thành bài toán đồng dạng nhưng đơn giản hơn.

Trường Đại học Khoa học Tự nhiên Khoa Công nghệ thông tin Bộ môn Tin học sở VC VC && BB BB Nội dung NHẬP MƠN LẬP TRÌNH Đặng Bình Phương dbphuong@fit.hcmuns.edu.vn KỸ THUẬT LẬP TRÌNH ĐỆ QUY Tổng quan đệ quy Các vấn đề đệ quy thơng dụng Phân tích giải thuật & khử đệ quy Các toán kinh điển VC VC && BB BB Bài toán NMLT - Kỹ thuật lập trình đệ quy VC VC && BB BB bước giải toán Bước Thế ngược ™Cho S(n) = + + + … + n =>S(10)? S(11)? S(n) ƒ Xác định kết toán đồng dạng từ đơn giản đến phức tạp Ỵ Kết cuối = S(n-1) + n S(n-1) S(10) = + + … + 10 = 55 = S(n-2) + n-1 … S(11) = + + … + 10 + 11 = 66 Bước Phân tích = S(10) = 55 + 11 ƒ Phân tích thành tốn đồng dạng đơn giản ƒ Dừng lại toán đồng dạng đơn giản xác định kết + 11 = 66 NMLT - Kỹ thuật lập trình đệ quy = … S(1) + … = S(0) + S(0) = NMLT - Kỹ thuật lập trình đệ quy VC VC && BB BB Khái niệm đệ quy VC VC && BB BB Hàm đệ quy NNLT C ™Khái niệm ƒ Một hàm gọi đệ quy bên thân hàm có lời gọi hàm lại cách trực tiếp hay gián tiếp ™Khái niệm Vấn đề đệ quy vấn đề định nghĩa ™Ví dụ Tổng S(n) tính thơng qua … Hàm(…) { … … Lời gọi Hàm … … … } tổng S(n-1) ™2 điều kiện quan trọng ¾ Tồn bước đệ quy … Hàm1(…) { … … Lời gọi Hàm2 … … … } … Hàm2(…) { … … Lời gọi Hàmx … … … } ¾ Điều kiện dừng ĐQ trực tiếp NMLT - Kỹ thuật lập trình đệ quy VC VC && BB BB Cấu trúc hàm đệ quy NMLT - Kỹ thuật lập trình đệ quy VC VC && BB BB } TUYẾN TÍNH Phần dừng (Base step) if () • Phần khởi tính tốn { điểm kết thúc thuật tốn … • Khơng chứa phần return ; định nghĩa } Phần đệ quy (Recursion step) … … Lời gọi Hàm• Có sử dụng thuật toán định nghĩa … Phân loại (TS) { ĐQ gián tiếp NHỊ PHÂN Trong thân hàm có lời gọi hàm gọi lại cách tường minh Trong thân hàm có hai lời gọi hàm gọi lại cách tường minh HỖ TƯƠNG PHI TUYẾN Trong thân hàm có lời gọi hàm tới hàm bên thân hàm có lời gọi hàm tới hàm NMLT - Kỹ thuật lập trình đệ quy Trong thân hàm có lời gọi hàm lại đặt bên thân vịng lặp NMLT - Kỹ thuật lập trình đệ quy VC VC && BB BB Đệ quy tuyến tính VC VC && BB BB Đệ quy nhị phân Ví dụ Ví dụ Tính S(n) = + + … + n Ỵ S(n) = S(n – 1) + n ĐK dừng: S(0) = Cấu trúc chương trình TênHàm() { if () { … return ; } … TênHàm(); … } NMLT - Kỹ thuật lập trình đệ quy VC VC && BB BB Cấu trúc chương trình : Chương trình : long Tong(int n) { if (n == 0) return 0; return Tong(n–1) + n; } TênHàm() { if () { … return ; } … TênHàm(); … … TênHàm(); … } NMLT - Kỹ thuật lập trình đệ quy VC VC && BB BB Ví dụ Tính số hạng thứ n dãy: x(0) = 1, y(0) = x(n) = x(n – 1) + y(n – 1) y(n) = 3*x(n – 1) + 2*y(n – 1) ĐK dừng: x(0) = 1, y(0) = : Chương trình : long yn(int n); long xn(int n) { if (n == 0) return 1; return xn(n-1)+yn(n-1); } long yn(int n) { if (n == 0) return 0; return 3*xn(n-1)+2*yn(n-1); } NMLT - Kỹ thuật lập trình đệ quy 10 Đệ quy phi tuyến Ví dụ TênHàm1() { if () return ; … TênHàm2(); … } TênHàm2() { if () return ; … TênHàm1(); … } : Chương trình : long Fibo(int n) { if (n == || n == 1) return 1; return Fibo(n–1)+Fibo(n–2); } Đệ quy hỗ tương Cấu trúc chương trình Tính số hạng thứ n dãy Fibonacy: f(0) = f(1) = f(n) = f(n – 1) + f(n – 2) n > ĐK dừng: f(0) = f(1) = Cấu trúc chương trình TênHàm() { if () { … return ; } … Vòng lặp { … TênHàm(); … } … } 11 Tính số hạng thứ n dãy: x(0) = x(n) = n2x(0) + (n-1)2x(1) + … + 22x(n – 2) + 12x(n – 1) ĐK dừng: x(0) = : Chương trình : long xn(int n) { if (n == 0) return 1; long s = 0; for (int i=1; i n ƒ C(n ,k) = C(n-1, k) + C(n-1, k-1) 0

Ngày đăng: 26/12/2023, 22:41

Tài liệu cùng người dùng

Tài liệu liên quan