Đệ quy và giải thuật đệ quy

29 83 0
Đệ quy và giải thuật đệ 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

Đệ quy và giải thuật đệ quy. Các bước xây dựng đệ quy. Bài toán THáp hà nội (Hanoi tower). Bài toán xếp hậu. Đệ Quy là một phương pháp lập trình cho phép một hàm có thể gọi lại chính nó trực tiếp hoặc gián tiếp. Một chương trình hoặc biến Đệ Quy không thể gọi tới nó mãi mãi, mà phải có Điểm Dừng đến một trường hợp nào đó, mà ta gọi trường hợp đó là Suy Biến

1 Cấu trúc liệu giải thuật Đệ quy giải thuật đệ Quy Nhóm 1: Nguyễn Hồng Phương Nam, Ninh Giang Trường, Vũ Thị Xuyến, Trần Huy Công, Nguyễn Danh Đa, Đỗ Huy Hồng Tóm tắt Nội dung Khái niệm đệ quy Minh họa nhớ đệ quy Ưu điểm nhược điểm đệ quy Các loại đệ quy Giải thuật thủ tục đệ quy Bài Tập Khái niệm đệ quy Giới thiệu •   Đệ Quy phương pháp lập trình cho phép hàm gọi lại trực tiếp gián tiếp • Ví dụ: void Test() { Test(); } • Một chương trình biến Đệ Quy khơng thể gọi tới mãi, mà phải có Điểm Dừng đến trường hợp đó, mà ta gọi trường hợp Suy Biến • Ví dụ: Ta định nghĩa n! sau: n! = Khái niệm đệ quy Giới thiỆU Chương trình đệ quy gồm thành phần chính: Phần sở: Điều kiện thoát khỏi đệ quy (điểm dừng) Phần đệ quy: Trong phần thân chương trình có lời gọi đến thân chương trình với giá trị tham số nhỏ giá trị ban đầu Khái niệm đệ quy Ví dụ  Ví dụ 1: tính dãy Fibonaci F(n) := int Fibo(int n) { if (n= đĩa 19 Bài tập Bài toán THáp hà nội (Hanoi tower) Trường hợp 1: Cọc A có đĩa A B C 20 Bài tập Bài toán THáp hà nội (Hanoi tower) Trường hợp 2: Cọc A có đĩa => Chuyển tốn cọc có đĩa (Cọc B có đĩa) A B C 21 Bài tập Bài toán THáp hà nội (Hanoi tower) Trường hợp 1: Cọc A có đĩa Chuyển n-1 đĩa Cọc B A => Bài toán chuyển Cọc đĩa B C 22 Bài tập Bài toán THáp hà nội (Hanoi tower) Tóm lại: Dùng giải thuật đệ quy • Nếu có đĩa chuyển ln từ A – C (Phần sở hay điều kiện dừng) • Nếu cọc có đĩa trở lên lên ( Phần đệ quy) → → → Chuyển N – từ A sang B Chuyển đĩa thứ N từ A sang C Chuyển N – Đĩa từ B sang A 23 Bài tập Bài toán xếp hậu Bài toán: xếp hậu bàn cờ vua cho tất hậu ăn (với số hậu n=>4) Nhận xét tốn: • • • • • Bàn cờ vua có kích thước 8x8 Trong luật cờ vua hậu chéo, ngang dọc Khơng có hậu cột Khơng có hậu hang Khơng có hậu đường chéo 24 Bài tập Bài toán xếp hậu 25 Bài tập Bài toán xếp hậu Đánh dấu vị trí bị khống chế: Để tiện việc trình bày ý tưởng lập trình, ta ký hiệu đường chéo (theo hướng tây nam - đông bắc) đường chéo phụ (theo hướng tây bắc - đông nam) Ta thấy ô (i, j) thuộc: • • Đường chéo có số thứ tự (i + j), Đường chéo phụ có số thứ tự (i - j + n) Mỗi lần đặt hậu vị trí (i, j) đó, ta phải đánh dấu hàng i, cột j, đường chéo (i + j) đường chéo phụ (i - j + n) để sau không đặt hậu vào vị trí Do đó, thay phải lưu phần đánh dấu cho tất ô bàn cờ (nghĩa cần mảng n x n),ta cần đánh dấu cho hàng, cột, đường chéo đường chéo phụ tương ứng (nghĩa cần hai mảng chiều n phần tử để đánh dấu hàng, cột cần thêm hai mảng chiều 2n+1 phần tử để đánh dấu đường chéo) 26 Bài tập Bài toán xếp hậu Ý tưởng: Sử dụng thuật toán quay lui để thử đặt lần lượt n quân hậu bàn cờ: Đầu tiên, thử đặt quân hậu (ở hàng 0) vào cột (có ncách đặt), Với vị trí quân hậu này: Thử đặt quân hậu (ở hàng 1) vào cột mà không bị quân hậu khống chế, Với vị trí quân hậu này: • Thử đặt quân hậu (ở hàng 2) vào cột mà không bị quân hậu quân hậu khống chế, tiếp tục với qn hậu • Tìm vị trí đặt cho qn hậu cuối (mà khơng bị n-1 quân hậu trước khống chế) nghĩa ta tìm phương án cho tốn Mỗi lần thử đặt hậu vị trí (i, j) phải đánh dấu khống chế cho cột j, đường chéo (i + j) đường chéo phụ (i - j + n) sau thử đặt hậu (để khỏi đặt vào hàng, cột, đường chéo bị hậu trước khống chế) cách duyệt từ hàng đến hàng (n - 1) nên không cần phải đánh dấu khống chế cho hàng Khi quay lui để thử đặt vị trí khác phải hủy đánh dấu hàng, cột đường chéo tương ứng Chú ý: Bài tập Bài Toán hàm số AckerMan  Đề bài: Cho hàm số: Acker(m,n)= Yêu cầu : • Hãy xác định Acker(1,2) • Viết thủ tục đệ qui thực tính giá trị hàm 28 Bài tập Bài Tốn hàm số AckerMan Phân tích: Điều kiện dừng ( Phần sở ): • Nếu m = trả lại giá trị n + Phần đệ quy: • • Nếu n = gọi hàm Acker(m-1, 1) Nếu n # m # gọi hàm Acker(m-1, Acker(m, n – 1)) 29 Bài tập Các tập thêm   Bài 1: Tính S(n) = + + + … + ( n - 1) + n với n >= Bài 2: Tính S(n) = + + … + + Bài 3: Tính S(n) = + + … + ... Tóm tắt Nội dung Khái niệm đệ quy Minh họa nhớ đệ quy Ưu điểm nhược điểm đệ quy Các loại đệ quy Giải thuật thủ tục đệ quy Bài Tập Khái niệm đệ quy Giới thiệu •   Đệ Quy phương pháp lập trình cho... gọi đệ quy lớn làm tràn STACK Thuật giải đệ quy khơng có điều kiện dừng 10 Ưu điểm nhược đệ quy • Nhận xét Thơng thường thay sử dụng lời giải đệ quy cho tốn, ta giải thay lời giải không đệ quy. .. tiếp Đệ Quy Đệ quy lồng Đệ Quy hỗ tương Tham số lời gọi đệ quy lời gọi đệ quy Đệ quy lồng chiếm nhớ nhanh Trong thân hàm A có lời gọi tới hàm B, thân hàm B có lời gọi tới hàm A 12 Các loại đệ quy

Ngày đăng: 28/04/2021, 10:51

Mục lục

  • Đệ quy và giải thuật đệ Quy

  • Ví dụ: cơ chế với bài toán tính 4!

  • Ví dụ: cơ chế với bài toán tính 4!

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

  • 4 Loại đệ quy thường gặp

  • Đệ quy Tuyến tính

  • Đệ quy nhị phân

  • Đệ quy Hỗ Tương

  • Các bước xây dựng đệ quy

  • Bài toán THáp hà nội (Hanoi tower)

  • Bài toán THáp hà nội (Hanoi tower)

  • Bài toán THáp hà nội (Hanoi tower)

  • Bài toán THáp hà nội (Hanoi tower)

  • Bài toán THáp hà nội (Hanoi tower)

  • Bài toán THáp hà nội (Hanoi tower)

  • Bài toán xếp hậu

  • Bài toán xếp hậu

  • Bài toán xếp hậu

  • Bài toán xếp hậu

  • Bài Toán hàm số AckerMan

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

Tài liệu liên quan