Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 27 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
27
Dung lượng
703,5 KB
Nội dung
A B C D F G E H K CẤU TRÚC DỮ LIỆU VÀ CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT (501040) GIẢI THUẬT (501040) Chương 5: Đệ qui Chương 5: Đệ qui ĐH Bách Khoa Tp.HCM Chương 5: Đệ qui 2 Khoa Công nghệ Thông tin Khái niệm đệ qui Khái niệm (định nghĩa) đệ qui có dùng lại chính nó. Ví dụ: giai thừa của n là 1 nếu n là 0 hoặc là n nhân cho giai thừa của n-1 nếu n > 0 Quá trình đệ qui gồm 2 phần: Trường hợp cơ sở (base case) Trường hợp đệ qui: cố gắng tiến về trường hợp cơ sở Ví dụ trên: Giai thừa của n là 1 nếu n là 0 Giai thừa của n là n * (giai thừa của n-1) nếu n>0 ĐH Bách Khoa Tp.HCM Chương 5: Đệ qui 3 Khoa Công nghệ Thông tin Tính giai thừa Định nghĩa không đệ qui: n! = n * (n-1) * … * 1 Định nghĩa đệ qui: n! = 1 nếu n=0 n * (n-1)! nếu n>0 Mã C++: int factorial(int n) { if (n==0) return 1; else return (n * factorial(n - 1)); } ĐH Bách Khoa Tp.HCM Chương 5: Đệ qui 4 Khoa Công nghệ Thông tin Thi hành hàm tính giai thừa n=2 … 2*factorial(1) factorial (2) n=1 … 1*factorial(0) factorial (1) n=0 … return 1; factorial (0) 1 1 6 2 n=3 … 3*factorial(2) factorial (3) ĐH Bách Khoa Tp.HCM Chương 5: Đệ qui 5 Khoa Công nghệ Thông tin Trạng thái hệ thống khi thi hành hàm tính giai thừa factorial(3) factorial(3) factorial(2) factorial(3) factorial(2) factorial(1) factorial(3) factorial(2) factorial(1) factorial(0) factorial(3) factorial(2) factorial(1) factorial(3) factorial(2) factorial(3) t Gọi hàm factorial(3) Gọi hàm factorial(2) Gọi hàm factorial(1) Gọi hàm factorial(0) Trả về từ hàm factorial(0 ) Trả về từ hàm factorial(1 ) Trả về từ hàm factorial(2 ) Trả về từ hàm factorial(3 ) Stack hệ thống Thời gian hệ thống t ĐH Bách Khoa Tp.HCM Chương 5: Đệ qui 6 Khoa Công nghệ Thông tin Bài toán Tháp Hà nội Luật: Di chuyển mỗi lần một đĩa Không được đặt đĩa lớn lên trên đĩa nhỏ ĐH Bách Khoa Tp.HCM Chương 5: Đệ qui 7 Khoa Công nghệ Thông tin Bài toán Tháp Hà nội – Thiết kế hàm Hàm đệ qui: Chuyển (count-1) đĩa trên đỉnh của cột start sang cột temp Chuyển 1 đĩa (cuối cùng) của cột start sang cột finish Chuyển count-1 đĩa từ cột temp sang cột finish magic ĐH Bách Khoa Tp.HCM Chương 5: Đệ qui 8 Khoa Công nghệ Thông tin Bài toán Tháp Hà nội – Mã C++ void move(int count, int start, int finish, int temp) { if (count > 0) { move(count − 1, start, temp, finish); cout << "Move disk " << count << " from " << start << " to " << finish << "." << endl; move(count − 1, temp, finish, start); } } ĐH Bách Khoa Tp.HCM Chương 5: Đệ qui 9 Khoa Công nghệ Thông tin Bài toán Tháp Hà nội – Thi hành ĐH Bách Khoa Tp.HCM Chương 5: Đệ qui 10 Khoa Công nghệ Thông tin Bài toán Tháp Hà nội – Cây đệ qui [...]...Thiết kế các giải thuật đệ qui Tìm bước chính yếu (bước đệ qui) Tìm qui tắc ngừng Phác thảo giải thuật Dùng câu lệnh if để lựa chọn trường hợp Kiểm tra điều kiện ngừng Đảm bảo là giải thuật luôn dừng lại Vẽ cây đệ qui Chiều cao cây ảnh hưởng lượng bộ nhớ cần thiết Số nút là số lần bước chính yếu được thi hành ĐH Bách Khoa Tp.HCM Khoa Công nghệ Thông tin Chương 5: Đệ qui 11 Cây thi hành và stack hệ thống... Fn-2 và lưu lại để dùng cho lần sau Giải thuật: int Fn2=0, Fn1=1, Fn; for (int i = 2; i . A B C D F G E H K CẤU TRÚC DỮ LIỆU VÀ CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT (501040) GIẢI THUẬT (501040) Chương 5: Đệ qui Chương 5: Đệ qui ĐH Bách Khoa. tin Thiết kế các giải thuật đệ qui Tìm bước chính yếu (bước đệ qui) Tìm qui tắc ngừng Phác thảo giải thuật Dùng câu lệnh if để lựa chọn trường hợp. Kiểm tra điều kiện ngừng Đảm bảo là giải thuật luôn. F n-2 Dùng biến lưu trữ giá trị đã tính của F n-1 Tính F n = F n-1 + F n-2 và lưu lại để dùng cho lần sau Giải thuật: int Fn2=0, Fn1=1, Fn; for (int i = 2; i <= n; i++) { Fn = Fn1 + Fn2; Fn2