1. Trang chủ
  2. » Công Nghệ Thông Tin

Bài giảng Kỹ thuật lập trình: Chương 5 - Trần Minh Thái

59 13 0

Đ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

Thông tin cơ bản

Định dạng
Số trang 59
Dung lượng 150,66 KB

Nội dung

Bài giảng Kỹ thuật lập trình - Chương 5: Lập trình đệ quy cung cấp cho người học các kiến thức: Giới thiệu về lập trình đệ quy, xây dựng giải thuật đệ quy, phân loại các dạng đệ quy, hoạt động của đệ quy, các giải pháp thay thế cho đệ quy. Mời các bạn cùng tham khảo.

Lập trình C Chương Lập trình đệ quy (3 tiết) Trần Minh Thái Email: minhthai@huflit.edu.vn Website: www.minhthai.edu.vn Cập nhật: 20/03/2017 Nội dung • Giới thiệu lập trình đệ quy • Xây dựng giải thuật đệ quy • Phân loại dạng đệ quy • Hoạt động đệ quy • Các giải pháp thay cho đệ quy • Bài tập GIỚI THIỆU VỀ LẬP TRÌNH ĐỆ QUY Giới thiệu lập trình đệ quy • Khi lập trình, gặp dạng tốn: đối tượng khó định nghĩa cách tường minh • Kỹ thuật định nghĩa đối tượng qua nó: kỹ thuật đệ quy (recursion) • Định nghĩa theo đệ quy khái niệm định nghĩa khái niệm thơng qua khái niệm muốn định nghĩa Giới thiệu lập trình đệ quy Ví dụ • Giai thừa n (n!) • Nếu n=0 n=1 n!=1 n!=(n-1)! * n • Nếu n>1 • Tập số tự nhiên • Số số tự nhiên (1∈N) • Số tự nhiên số tự nhiên cộng (n∈N ⇒ (n+1)∈N) Giới thiệu lập trình đệ quy • Cấu trúc danh sách liên kết (linklist/xâu) kiểu T • Cấu trúc rỗng danh sách liên kết kiểu T • Kết nối thành phần kiểu T (nút kiểu T) vào danh sách liên kết kiểu T, ta có danh sách liên kết kiểu T Giới thiệu lập trình đệ quy  Để định nghĩa đệ quy gồm phần: Phần cố định (cơ sở - neo – anchor): trường hợp suy biến thuật toán qua điều kiện cụ thể (phần dừng đệ quy) Phần đệ quy (quy nạp): mô tả thuật tốn trường hợp phổ biến qua đối tượng (gọi hàm đệ quy) cách gián tiếp hay trực tiếp !!! Phần đệ quy phải tiến phần không đệ quy Xây dựng giải thuật đệ quy • Bước 1: Thơng số hóa tốn • Bước 2: Phát trường hợp suy biến tìm giải thuật cho tốn • Bước 3: Phân rã toán theo hướng đệ quy Bước 1: Thơng số hóa tốn • Tổng qt hóa tốn, tìm nhóm tốn, thơng số kích thước, thơng số điều khiển • Ví dụ: thơng số n hàm tính giai thừa, hàm Fibonaci, thơng số a, b hàm tìm ước số chung lớn Bước 2: Phát TH suy biến, tìm giải thuật Là trường hợp tương ứng với giá trị biên biến điều khiển (trường hợp kích thước nhỏ nhất, trường hợp đặc biệt) mà khơng cần đệ quy • Ví dụ: • GiaiThua(1) = • USCLN(a, 0) = a • SUM(a[m:m]) = a[m] 10 Đệ quy phi tuyến • Hoặc có dạng: B1: Nếu thỏa điều kiện dừng Thực lệnh S B2: Ngược lại: B2.1 Thực lệnh S* B2.2 Vòng lặp for từ giá trị đầu đến cuối Gọi đệ quy 45 Đệ quy phi tuyến • Ta có cơng thức truy hồi tính dãy {Xn} sau: • X0 = • Xn = n2X0 +(n-1)2X1+ +22Xn-2 +12Xn-1 46 Đệ quy phi tuyến int TinhX(int n) { if (n == 0) return 1; else { int tong = 0; for (int i = 0; i < n; i++) tong += (n - i) * (n - i) * TinhX(i); return tong; } } 47 Đệ quy hỗ tương Trong thân hàm có lời gọi hàm đến hàm thân hàm có lời gọi hàm tới hàm 48 Đệ quy hỗ tương Hàm thứ Hàm thứ hai B1: B1: Nếu thỏa đk dừng Thực lệnh S* B2 Ngược lại: Nếu thỏa đk dừng Thực lệnh S* B2 Ngược lại: Thực lệnh S Thực lệnh S Gọi ĐQ hàm hai Gọi ĐQ hàm 49 Đệ quy hỗ tương • Tính số hạng thứ n hai dãy {Xn}, {Yn} định nghĩa sau: • X0 =Y0 =1 (n>0) • Xn = Xn-1 + Yn-1 (n>0) • Yn = n2Xn-1 + Yn-1 • Điều kiện dừng:X(0) = Y(0) = 50 Đệ quy hỗ tương 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); } 51 KHỬ ĐỆ QUY Các giải pháp thay cho đệ quy • Đệ quy phương pháp giúp ta tìm giải thuật cho tốn khó • Giải thuật đệ quy thường gọn gàng, dễ hiểu, dễ chuyển thành chương trình • Tuy nhiên giải thuật đệ quy thường tốn không gian nhớ thời gian thực thi Hơn nữa, có số ngơn ngữ lập trình khơng cho phép đệ quy  Vì vậy, việc khử đệ quy vấn đề cần quan tâm 53 Tìm cơng thức khơng đệ quy • Ví dụ: Tính tổng S(n)=1+2+ +n, với n>0 int TongDeQuy(int n) { if (n == 1) return 1; return n + tongDeQuy(n - 1); } int TongKhongDeQuy (int n) { return n * (n + 1) / 2; } 54 Dùng vòng lặp để khử đệ quy • Ví dụ: Tính tổng S(n)=1+2+ +n, với n>0 int TongVongLap(int n) { int S = 0; for (int i = 1; i 0) • Yn = n2Xn-1 + Yn-1 • Điều kiện dừng:X(0) = Y(0) = 50 Đệ quy hỗ tương long TinhXn(int n) { if (n == 0) return 1; return TinhXn(n - 1) + TinhYn(n - 1); } long TinhYn(int... LietKeLe(a, n-1) Bước 1.2 Nếu a[n-1] lẻ xuất a[n-1] 28 Đệ quy tuyến tính • Cài đặt: void LietKeLe(int[] a, int n) { if (n > 0) { LietKeLe(a, n - 1); if (a[n - 1] % != 0) printf(“%4d", a[n - 1]); }... ĐỆ QUY Giới thiệu lập trình đệ quy • Khi lập trình, gặp dạng tốn: đối tượng khó định nghĩa cách tường minh • Kỹ thuật định nghĩa đối tượng qua nó: kỹ thuật đệ quy (recursion) • Định nghĩa theo

Ngày đăng: 11/05/2021, 03:08

TỪ KHÓA LIÊN QUAN