Nhận xét giải thuật đệ qui

Một phần của tài liệu Giáo trình cấu trúc dữ liệu và giải thuật (Trang 35 - 38)

Nhược điểm:

Tốn bộ nhớ và chạy chậm vì:

- Khi một hàm đệ qui gọi chính nó, tập các đối tượng được sử dụng trong hàm được tạo ra như tham số, biến cục bộ. Ngoài ra, việc chuyển giao điều khiển từ các hàm cũng cần lưu trữ thông số (gọi là địa chỉ quay lui), dùng

cho việc trả lại điều khiển cho hàm ban đầu.

- Việc sử dụng đệ qui đôi khi tạo ra các phép toán thừa, không cần thiết do tính chất tự động gọi thực hiện hàm khi chưa gặp điều kiện dừng của đệ qui (ví dụ: return (F(n-2) + F(n-1))).

Ưu điểm:

- Giải thuật đệ quy đẹp (gọn gàng), dễ chuyển thành chương trình. - Nhiều giải thuật rất dễ mô tả dạng đệ qui nhưng lại rất khó mô tả với

giải thuật không đệ qui (bài toán tháp Hà nội), và có những giải thuật đệ qui thực sự có hiệu lực cao (như giải thuật sắp xếp nhanh - Quick Sort)

- Về mặt định nghĩa, công cụ đệ qui đã cho phép xác định một tập vô

hạn các đối tượng bằng một phát biểu hữu hạn. Như trong định nghĩa văn phạm, định nghĩa cú pháp ngôn ngữ, định nghĩa một số cấu trúc dữ liệu,...

34

Trong thực tế, tất cả các giải thuật đệ qui đều có thể đưa về dạng lặp (còn gọi là “khử” đệ qui). Do đó, chỉ sử dụng đệ qui khi các giải thuật không đệ qui thay thế trở nên phức tạp hoặc chương trình trở nên rất khó hiểu.

Ví dụ 2.6: Giải thật Fibonacci không đệ qui (dùng phương pháp lặp):

int F(int n) { int f1, f2, fn;

f1=1; f2=1;

for (int i=3; i<=n; i++) { fn=f1+f2; f1=f2; f2= fn; } return fn; }

35

CÂU HỎI VÀ BÀI TẬP CHƯƠNG 2

1) Thực hiện công việc sau:

- Viết giải thuật đệ qui để đảo ngược một xâu ký tự, ví dụ xâu “abcde” thành “edcba”.

- Hãy chỉ rõ các đặc điểm của giải thuật đệ qui ở giải thuật trên. - Viết hàm đệ qui theo giải thuật trên.

- Viết hàm khử đệ qui bằng phương pháp lặp cho giải thuật trên. 2) Viết hàm khử đệ qui bằng phương pháp lặp cho ví dụ 2.4.

3) Hoàn thiện ví dụ 2.5 thành một chương trình bằng ngôn ngữ C, chạy và

36

CHƯƠNG 3 DANH SÁCH

Mục tiêu:

- Trình bày khái niệm và các phép toán cơ bản trên danh sách; - Trình bày cách sử dụng các loại danh sách về cách tổ chức và các thao tác xử lý cơ bản trên cấu trúc danh sách.

- Giải được các bài toán sử dụng danh sách.

Một phần của tài liệu Giáo trình cấu trúc dữ liệu và giải thuật (Trang 35 - 38)

Tải bản đầy đủ (PDF)

(186 trang)