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

Bài giảng Kỹ thuật lập trình: Kỹ thuật lập trình đệ quy - ThS. Đặng Bình Phương

44 3 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

Chương trình trình bày về kỹ thuật lập trình đệ quy. Nội dung chính trong chương này gồm có: Tổng quan về đệ quy, các vấn đề đệ quy thông dụng, phân tích giải thuật & khử đệ quy, các bài toán kinh điển. Mời các bạn cùng tham khảo để nắm bắt các nội dung chi tiết.

Bộ môn Công nghệ phần mềm Khoa Công nghệ thông tin Trường Đại học Khoa học Tự nhiên KỸ THUẬT LẬP TRÌNH ThS Đặng Bình Phương dbphuong@fit.hcmus.edu.vn KỸ THUẬT LẬP TRÌNH ĐỆ QUY && VC VC BB BB Nội dung 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 Kỹ thuật lập trình đệ quy && VC VC BB BB Bài toán  Cho S(n) = + + + … + n =>S(10)? S(11)? S(10) = + + … + 10 = 55 S(11) = + + … + 10 + 11 = 66 = S(10) = 55 + 11 + 11 = 66 Kỹ thuật lập trình đệ quy && VC VC BB BB bước giải toán Bước Thế ngược 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(n-2) + n-1 … Bước Phân tích Phân tích thành toán đồng dạng đơn giản Dừng lại tốn đồng dạng đơn giản xác định kết = … S(1) + … = S(0) + S(0) = Kỹ thuật lập trình đệ quy && VC VC BB BB Khái niệm đệ quy Khái niệm Vấn đề đệ quy vấn đề định nghĩa Ví dụ Tổng S(n) tính thơng qua tổng S(n-1) 2 điều kiện quan trọng  Tồn bước đệ quy  Điều kiện dừng Kỹ thuật lập trình đệ 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 … Hàm(…) { … … Lời gọi Hàm … … … } ĐQ trực tiếp … Hàm1(…) { … … Lời gọi Hàm2 … … … } … Hàm2(…) { … … Lời gọi Hàmx … … … } ĐQ gián tiếp Kỹ thuật lập trình đệ quy && VC VC BB BB Cấu trúc hàm đệ quy { (TS) 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) … • Có sử dụng thuật toán … Lời gọi Hàm định nghĩa … } Kỹ thuật lập trình đệ quy && VC VC BB BB Phân loại TUYẾN TÍNH 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 Trong thân hàm có lời gọi hàm lại đặt bên thân vịng lặp Kỹ thuật lập trình đệ quy && VC VC BB BB Đệ quy tuyến tính 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(); … } : Chương trình : long Tong(int n) { if (n == 0) return 0; return Tong(n–1) + n; } Kỹ thuật lập trình đệ quy && VC VC BB BB Đệ quy nhị phân Ví dụ Cấu trúc chương trình TênHàm() { if () { … return ; } … TênHàm(); … … TênHàm(); … } 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) = : Chương trình : long Fibo(int n) { if (n == || n == 1) return 1; return Fibo(n–1)+Fibo(n– 2); } Kỹ thuật lập trình đệ quy && VC VC BB BB Tháp Hà Nội N đĩa A  C = N-1 ? đĩa A  B + Đĩa N A  C + N-1 đĩa B  C … N-1 N Cột nguồn A Cột trung gian B Cột đích C Kỹ thuật lập trình đệ quy && VC VC BB BB Tám hậu  Mô tả tốn  Cho bàn cờ vua kích thước 8x8  Hãy đặt hoàng hậu lên bàn cờ cho khơng có hồng hậu “ăn” nhau: • Khơng nằm dịng, cột • Khơng nằm đường chéo xi, ngược Kỹ thuật lập trình đệ quy && VC VC BB BB Tám hậu – Các dòng n đường Kỹ thuật lập trình đệ quy && VC VC BB BB Tám hậu – Các cột n đường Kỹ thuật lập trình đệ quy && VC VC BB BB Tám hậu – Các đường chéo xuôi 2n-1 đường 14 13 12 11 10 Kỹ thuật lập trình đệ quy && VC VC BB BB Tám hậu – Các đường chéo ngược 2n-1 đường 10 11 12 13 14 Kỹ thuật lập trình đệ quy && VC VC BB BB Tám hậu – Các dòng i=2 j=3 j+i=5 j-i+n-1=8 Kỹ thuật lập trình đệ quy && VC VC BB BB Mã tuần  Mô tả tốn  Cho bàn cờ vua kích thước 8x8 (64 ô)  Hãy mã 64 nước cho ô qua lần (xuất phát từ ô bất kỳ) theo luật: Kỹ thuật lập trình đệ quy && VC VC BB BB Phân tích giải thuật đệ quy  Sử dụng đệ quy (recursive tree)  Giúp hình dung bước phân tích ngược  Bước phân tích: từ xuống  Bước ngược từ trái sang phải, từ lên  Ý nghĩa • Chiều cao  Độ lớn STACK • Số nút  Số lời gọi hàm Kỹ thuật lập trình đệ quy && VC VC BB BB Nhận xét  Ưu điểm  Sáng sủa, dễ hiểu, nêu rõ chất vấn đề  Tiết kiệm thời gian thực mã nguồn  Một số tốn khó giải khơng dùng đệ qui  Khuyết điểm  Tốn nhiều nhớ, thời gian thực thi lâu  Một số tính tốn bị lặp lại nhiều lần  Một số tốn khơng có lời giải đệ quy Kỹ thuật lập trình đệ quy && VC VC BB BB Ví dụ đệ quy Fibonacy F(4) F(3) F(2) F(1) F(2) F(1) F(1) F(0) F(0) Lặp lại Kỹ thuật lập trình đệ quy && VC VC BB BB Khử đệ quy (tham khảo)  Khái niệm  Đưa tốn đệ quy tốn khơng sử dụng đệ quy  Thường sử dụng vòng lặp STACK tự tạo … Kỹ thuật lập trình đệ quy && VC VC BB BB Tổng kết  Nhận xét  Chỉ nên dùng phương pháp đệ quy để giải toán kinh điển giải vấn đề “chia để trị”, “lần ngược”  Vấn đề đệ quy không thiết phải giải phương pháp đệ quy, sử dụng phương pháp khác thay (khử đệ quy)  Tiện cho người lập trình không tối ưu chạy máy  Bước đầu nên giải đệ quy bước khử đệ quy để nâng cao hiệu Kỹ thuật lập trình đệ quy && VC VC BB BB Bài tập  Bài 1: Các tập mảng sử dụng đệ quy  Bài 2: Viết hàm đệ quy xác định chiều dài chuỗi  Bài 3: Hiển thị n dòng tam giác Pascal  a[i][0] = a[i][i] =  a[i][k] = a[i-1][k-1] + a[i-1][k] Dòng 0: Dòng 1: 1 Dòng 2: Dòng 3: 3 Dòng 4: … Kỹ thuật lập trình đệ quy && VC VC BB BB Bài tập  Bài 4: Viết hàm đệ quy tính C(n, k) biết  C(n, k) = k = k = n  C(n, k) = k > n  C(n ,k) = C(n-1, k) + C(n-1, k-1) 0

Ngày đăng: 09/05/2021, 18:15

Xem thêm:

Mục lục

    KỸ THUẬT LẬP TRÌNH

    2 bước giải bài toán

    Khái niệm đệ quy

    Hàm đệ quy trong NNLT C

    Cấu trúc hàm đệ quy

    Đệ quy tuyến tính

    Đệ quy nhị phân

    Đệ quy hỗ tương

    Đệ quy phi tuyến

    Các bước xây dựng hàm đệ quy

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN