Đang chuẩn bị nút TẢI XUỐNG, xin hãy chờ
Tải xuống
Chương 5 bài giảng cấu trúc dữ liệu và giải thuật của trường ĐHBK TP.HCM. Trình bày ngắn gọn dễ hiểu với những hiệu ứng minh họa sinh động. Để các bạn hiểu rõ hơn về đệ qui là gì? Khái niệm đệ qui có dùng lại chính nó. | CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT (501040) Chương 5: Đệ qui 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 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)); } 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) 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 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ỏ 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 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 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 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)); } 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) 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) .