NHẬP MÔN LẬP TRINH Kĩ Thuật lập trình để quy

44 153 0
NHẬP MÔN LẬP TRINH 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

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ở NHẬP MƠN LẬPĐặng TRÌNH Bình Phương dbphuong@fit.hcmuns.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 NMLT - 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 NMLT - 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 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 = … S(1) + … = S(0) + S(0) = NMLT - 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 NMLT - 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 NMLT - 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 ;nghĩa } Phần đệ quy (Recursion step) … • Có sử dụng thuật tốn … Lời gọi Hàm định nghĩa … } NMLT - 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 NMLT - 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; } NMLT - 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); } NMLT - 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 NMLT - 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 hồ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 NMLT - Kỹ thuật lập trình đệ quy && VC VC BB BB Tám hậu – Các dòng n đường NMLT - Kỹ thuật lập trình đệ quy && VC VC BB BB Tám hậu – Các cột n đường NMLT - 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 NMLT - 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 NMLT - 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 NMLT - 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: NMLT - 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 NMLT - 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 NMLT - 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 NMLT - Kỹ thuật lập trình đệ quy && VC VC BB BB Khử đệ quy (Tham khảo)  Khái niệm  Đưa toán đệ quy tốn khơng sử dụng đệ quy  Thường sử dụng vòng lặp STACK tự tạo … NMLT - 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 NMLT - Kỹ thuật lập trình đệ quy && VC VC BB BB Bài tập thực hành  Bài 1: Các tập mảng sử dụng đệ quy  Bài 2: Viết hàm 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]  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: 08/02/2020, 10:50

Từ khóa liên quan

Mục lục

  • NHẬP MÔN LẬP TRÌNH

  • Nội dung

  • Bài toán

  • 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

  • Phân loại

  • Đệ 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

  • Cơ chế gọi hàm và STACK

  • Nhận xét

  • Ví dụ gọi hàm đệ quy

  • Một số lỗi thường gặp

  • Các vấn đề đệ quy thông dụng

  • 1.Hệ thức truy hồi

  • Slide 20

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

  • Đang cập nhật ...

Tài liệu liên quan