Bài giảng Cấu trúc dữ liệu: Chương 12 - Nguyễn Xuân Vinh
lượt xem 4
download
Bài giảng Cấu trúc dữ liệu - Chương 12: Giải thuật đệ quy trình bày về khái niệm đệ quy, điều kiện viết chương trình đệ quy, một số ví dụ đệ quy và thiết kế giải thuật đệ quy. Mời bạn đọc cùng tham khảo.
Bình luận(0) Đăng nhập để gửi bình luận!
Nội dung Text: Bài giảng Cấu trúc dữ liệu: Chương 12 - Nguyễn Xuân Vinh
- GV: NGUYỄN XUÂN VINH CẤU TRÚC DỮ LIỆU DATA STRUCTURES [214331] GIẢI THUẬT đệ quy MÔN: CẤU TRÚC DỮ LIỆU Nguyễn Xuân Vinh 6/12/14 nguyenxuanvinh@hcmuaf.edu. vn /XX 1
- GV: NGUYỄN XUÂN VINH Nội dung • Khái niệm đệ quy. • Thiết kế giải thuật đệ quy MÔN: CẤU TRÚC DỮ LIỆU 6/12/14 /XX 2
- GV: NGUYỄN XUÂN VINH Khái niệm đệ quy • đệ quy là một khái niệm cơ bản trong toán học và khoa học máy tính. Một đối tượng được gọi là đệ quy nếu nó hoặc một phần của nó được định nghĩa thông qua khái niệm về chính nó. • Trong lĩnh vực lập trình: 1 chương trình gọi là đệ quy nếu nó gọi lại chính nó. MÔN: CẤU TRÚC DỮ LIỆU • Chương trình đệ quy luôn kiểm tra điều kiện dừng: – Nếu không thỏa, tiếp tục gọi đệ quy. – Nếu thỏa mãn không gọi chính nó nữa, chấm dứt đệ quy. 6/12/14 /XX 3
- GV: NGUYỄN XUÂN VINH Khái niệm đệ quy • Ví dụ: – Định nghĩa số tự nhiên: • 0 là số tự nhiên. • Nếu k là số tự nhiên thì k+1 cũng là số tự nhiên. MÔN: CẤU TRÚC DỮ LIỆU – Định nghĩa xâu kí tự (chuỗi kí tự) bằng đệ quy: • Xâu rỗng là xâu kí tự • Một chữ cái bất kì ghép với 1 xâu sẽ tạo thành xâu mới – Định nghĩa hàm giai thừa n!: • Khi n = 0, định nghĩa 0! = 1 • Khi n>0, định nghĩa n! = (n-1)! * n 6/12/14 /XX 4
- GV: NGUYỄN XUÂN VINH Khái niệm đệ quy • Ví dụ private int Factor(int n){ if (n==0) return 1; else return n*Factor(n-1); MÔN: CẤU TRÚC DỮ LIỆU } • Đặc điểm của chương trình đệ quy: – Chương trình này có thể gọi chính nó – Khi chương trình gọi chính nó thì mục đích là để giải quyết một vấn đề tương tự nhưng nhỏ hơn. – Vấn đề nhỏ hơn này một lúc nào đó sẽ đơn giản tới mức 6/12/14 chương trình có thể tự giải quyết mà không cần phải gọi chính nó nữa. /XX 5
- GV: NGUYỄN XUÂN VINH Khái niệm đệ quy • Để xây dựng 1 chương trình đệ quy cần tồn tại 1 công thức đệ quy. Công thức này gồm 2 phần: – Phần đệ quy: recursive case – Phần cơ bản: base case Ưu điểm của chương trình đệ quy: MÔN: CẤU TRÚC DỮ LIỆU • – Có thể thực hiện một lượng lớn các thao tác tính toán thông qua 1 đoạn chương trình ngắn gọn. – Có thể định nghĩa một tập vô hạn các đối tượng thông qua 1 số hữu hạn lời phát biểu. 6/12/14 /XX 6
- GV: NGUYỄN XUÂN VINH Điều kiện viết chương trình đệ quy • Vấn đề cần xử lý phải giải quyết được bằng cách đệ quy. • Ngôn ngữ dùng viết chương trình phải hỗ trợ đệ quy. • Các loại đệ quy: – đệ quy trực tiếp: một hàm gọi tới chính nó MÔN: CẤU TRÚC DỮ LIỆU – đệ quy gián tiếp: Một hàm gọi tới hàm khác, hàm khác này gọi tới hàm bạn đầu 6/12/14 /XX 7
- GV: NGUYỄN XUÂN VINH Khi nào không nên sử dụng đệ quy • Khi một hàm đệ quy gọi chính nó thì tập các đối tượng được sử dụng trong hàm này như: biến, hằng, cấu trúc… và các thông số cần cho việc chuyển giao điều khiển sẽ được sinh ra. • Sử dụng đệ quy đôi khi tạo ra những tính toán thừa, không cần thiết do tính chất tự động gọi thực hiện thủ tục khi chưa kết MÔN: CẤU TRÚC DỮ LIỆU thúc đệ quy. • Nếu chương trình có thể viết dưới dạng lặp hoặc các cấu trúc lệnh khác thì không nên sử dụng đệ quy. 6/12/14 /XX 8
- GV: NGUYỄN XUÂN VINH Ví dụ • Ví dụ 1 : Lập hàm tính n! bằng đệ quy int GT(int n) { MÔN: CẤU TRÚC DỮ LIỆU if (n==0) // điểm dừng return 1; else return n*GT(n1); } 6/12/14 /XX 9
- GV: NGUYỄN XUÂN VINH 6. Đệ quy (Recursion) Minh họa Gọi hàm answer
- GV: NGUYỄN XUÂN VINH 6. Đệ quy (Recursion) Minh họa MÔN: CẤU TRÚC DỮ LIỆU GT. 1st: N=5, Chưa xong: 5*GT(4) 6/12/14 CT chính: Chưa xong: answer
- GV: NGUYỄN XUÂN VINH 6. Đệ quy (Recursion) Minh họa MÔN: CẤU TRÚC DỮ LIỆU GT. 2nd: N=4, Chưa xong: 4*GT(3) GT. 1st: N=5, Chưa xong: 5*GT(4) 6/12/14 CT chính: Chưa xong: answer
- GV: NGUYỄN XUÂN VINH 6. Đệ quy (Recursion) Minh họa MÔN: CẤU TRÚC DỮ LIỆU GT. 3rd: N=3, Chưa xong: 3*GT(2) GT. 2nd: N=4, Chưa xong: 4*GT(3) GT. 1st: N=5, Chưa xong: 5*GT(4) 6/12/14 CT chính: Chưa xong: answer
- GV: NGUYỄN XUÂN VINH 6. Đệ quy (Recursion) Minh họa MÔN: CẤU TRÚC DỮ LIỆU GT. 4th: N=2, Chưa xong: 2*GT(1) GT. 3rd: N=3, Chưa xong: 3*GT(2) GT. 2nd: N=4, Chưa xong: 4*GT(3) GT. 1st: N=5, Chưa xong: 5*GT(4) 6/12/14 CT chính: Chưa xong: answer
- GV: NGUYỄN XUÂN VINH 6. Đệ quy (Recursion) Minh họa MÔN: CẤU TRÚC DỮ LIỆU GT. 5th: N=1, Chưa xong: 1*GT(0) GT. 4th: N=2, Chưa xong: 2*GT(1) GT. 3rd: N=3, Chưa xong: 3*GT(2) GT. 2nd: N=4, Chưa xong: 4*GT(3) GT. 1st: N=5, Chưa xong: 5*GT(4) 6/12/14 CT chính: Chưa xong: answer
- GV: NGUYỄN XUÂN VINH 6. Đệ quy (Recursion) Minh họa GT. 6th: N=0, xong: returns 1 MÔN: CẤU TRÚC DỮ LIỆU GT. 5th: N=1, Chưa xong: 1*GT(0) GT. 4th: N=2, Chưa xong: 2*GT(1) GT. 3rd: N=3, Chưa xong: 3*GT(2) GT. 2nd: N=4, Chưa xong: 4*GT(3) GT. 1st: N=5, Chưa xong: 5*GT(4) 6/12/14 CT chính: Chưa xong: answer
- GV: NGUYỄN XUÂN VINH 6. Đệ quy (Recursion) Minh họa MÔN: CẤU TRÚC DỮ LIỆU GT. 5th: N=1, xong: returns 1*1 GT. 4th: N=2, Chưa xong: 2*GT(1) GT. 3rd: N=3, Chưa xong: 3*GT(2) GT. 2nd: N=4, Chưa xong: 4*GT(3) GT. 1st: N=5, Chưa xong: 5*GT(4) 6/12/14 CT chính: Chưa xong: answer
- GV: NGUYỄN XUÂN VINH 6. Đệ quy (Recursion) Minh họa MÔN: CẤU TRÚC DỮ LIỆU GT. 4th: N=2, xong: returns 2*1 GT. 3rd: N=3, Chưa xong: 3*GT(2) GT. 2nd: N=4, Chưa xong: 4*GT(3) GT. 1st: N=5, Chưa xong: 5*GT(4) 6/12/14 CT chính: Chưa xong: answer
- GV: NGUYỄN XUÂN VINH 6. Đệ quy (Recursion) Minh họa MÔN: CẤU TRÚC DỮ LIỆU GT. 3rd: N=3, xong: returns 3*2 GT. 2nd: N=4, Chưa xong: 4*GT(3) GT. 1st: N=5, Chưa xong: 5*GT(4) 6/12/14 CT chính: Chưa xong: answer
- GV: NGUYỄN XUÂN VINH 6. Đệ quy (Recursion) Minh họa MÔN: CẤU TRÚC DỮ LIỆU GT. 2nd: N=4, xong: returns 4*6 GT. 1st: N=5, Chưa xong: 5*GT(4) 6/12/14 CT chính: Chưa xong: answer
CÓ THỂ BẠN MUỐN DOWNLOAD
-
Bài giảng Cấu trúc dữ liệu - Bài 1:Tổng quan về cấu trúc dữ liệu và giải thuật
47 p | 174 | 17
-
Bài giảng Cấu trúc dữ liệu 1: Chương 1 - Lương Trần Hy Hiến
7 p | 162 | 9
-
Bài giảng Cấu trúc dữ liệu và giải thuật trong C++ - Bài 8: Cấu trúc dữ liệu ngăn xếp
28 p | 77 | 9
-
Bài giảng Cấu trúc dữ liệu giải thuật: Các kiểu dữ liệu trừu tượng cơ bản - Cấu trúc dữ liệu tuyến tính
92 p | 116 | 9
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Cấu trúc dữ liệu cây đỏ đen - Bùi Tiến Lên
25 p | 79 | 8
-
Bài giảng Cấu trúc dữ liệu và giải thuật – Bài 17: Cấu trúc dữ liệu dạng cây
21 p | 77 | 8
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Các cấu trúc dữ liệu
193 p | 57 | 7
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Chương 1 - Trần Minh Thái (2016)
62 p | 94 | 6
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Chương 1 - Trần Minh Thái (Trường Đại học Hồng Bàng )
62 p | 158 | 6
-
Bài giảng Cấu trúc dữ liệu - Chương 3: Cấu trúc cây
65 p | 58 | 6
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Cấu trúc dữ liệu cây AA - Bùi Tiến Lên
30 p | 35 | 6
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Chương 1 – Trần Minh Thái (2017)
67 p | 106 | 4
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Cấu trúc dữ liệu cây - Bùi Tiến Lên
68 p | 40 | 4
-
Bài giảng Cấu trúc dữ liệu: Chương 1 - ThS. Thiều Quang Trung (2018)
44 p | 43 | 4
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Cấu trúc dữ liệu cây AVL - Bùi Tiến Lên
38 p | 47 | 4
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Chương 5 - Ngô Quang Thạch
24 p | 58 | 3
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Chương 2 - Th.S Thiều Quang Trung
41 p | 68 | 3
-
Bài giảng Cấu trúc dữ liệu giải thuật: Cấu trúc dữ liệu
17 p | 50 | 2
Chịu trách nhiệm nội dung:
Nguyễn Công Hà - Giám đốc Công ty TNHH TÀI LIỆU TRỰC TUYẾN VI NA
LIÊN HỆ
Địa chỉ: P402, 54A Nơ Trang Long, Phường 14, Q.Bình Thạnh, TP.HCM
Hotline: 093 303 0098
Email: support@tailieu.vn