Giải thuật đệ qui và chương trình đệ 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 cđn công nghiệp hà nội (Trang 28 - 30)

27 2.1. Giải thuật đệ qui.

Nếu lời giải của bài toán P được thực hiện bằng lời giải của một bài toán P', có dạng giống như P, thì đó là một lời giải đệ qui. Giải thuật tương ứng với lời giải như vậy gọi là giải thuật đệ qui.

Nhưng điểm mấu chốt cần lưu ý là: P' tuy có dạng giống như P, nhưng theo một nghĩa nào đó, nó phải nhỏ hơn P.

Ví dụ 2.1: Xét bài toán tính giai thừa của số nguyên dương n.

Giải thuật đệ qui :

Input: n, là một số nguyên dương. Process:

Bước 1: Kiểm tra n:

Nếu: n=0 hoặc n=1 thì gán N!←1 và kết thúc Nếu: n≠0 và n≠1 chuyển sang bước 2

Bước 2: Tính giai thừa của n theo công thức: N! ←n*(n-1)! Và quay lại bước 1

Output: N!, là giai thừa của n

Giả sử n=4, giải thuật tính giai thừa của n được thể hiện cụ thể như sau: n≠0 và n≠1 chuyển sang bước 2

4!=4*(4-1)! Quay lại bước 1

n≠0 và n≠1 chuyển sang bước 2

3!=3*(3-1)! Quay lại bước 1 n≠0 và n≠1 chuyển sang bước 2

2!=2*(2-1)! Quay lại bước 1 n=1 1!=1 Kết thúc

Nhận xét:

- Sau mỗi lần kiểm tra n ≠ 0 hoặc n ≠ 1 thì n lại giảm đi một giá trị và sẽ lại được thực hiện bằng một chiến thuật như đã dùng trước đó.

- Có một trường hợp đặc biệt, khác với mọi trường hợp trước, sẽ

đạt được sau nhiều lần giảm n đi một giá trị, đó là trường hợp n=0 hoặc n=1. Lúc đó việc giảm n sẽ ngừng lại. Trường hợp đặc biệt này được gọi là trường hợp suy biến.

Ta thể hiện giải thuật tính N! này dưới dạng một hàm hay chương trình con đệ qui.

2.2. Chương trình con đệ qui. Hàm tính giai thừa: Hàm tính giai thừa:

28 { if ((n==0) || (n==1)) return 1; else return n*FACTORIAL(n-1); }

Hàm như trên được gọi là hàm đệ qui. Có thể nêu ra mấy đặc điểm sau: - Hàm đệ qui có lời gọi đến chính hàm đó. Ở đây hàm

FACTORIAL có lời gọi tới hàm FACTORIAL.

- Mỗi lần có lời gọi lại hàm thì kích thước của bài toán đã thu nhỏ

hơn trước. Ở đây khi có lời gọi hàm FACTORIAL thì kích thước n được giảm đi một giá trị so với trước khi có lời gọi.

- Có một trường hợp đặc biệt, trường hợp suy biến. Ở đây chính là trường hợp (n==0) hoặc (n==1). Khi trường hợp này xảy ra thì bài toán còn lại sẽ được giải quyết theo một cách khác hẳn và việc gọi đệ qui cũng kết thúc. Chính tình trạng kích thước bài toán cứ giảm dần sẽ đảm bảo cho trường hợp suy biến này đạt tới được.

2.3. Đặc điểm của một chương trình con đệ qui:

Một chương trình con được gọi là đệ qui đồng thời phải thỏa mãn 3 đặc điểm sau:

- Chương trình con (CTC) đệ qui có lời gọi đến chính nó.

- Mỗi lần có lời gọi lại CTC thì kích thước của bài toán đã thu nhỏ hơn trước.

- Có một trường hợp đặc biệt, trường hợp suy biến. Đây còn gọi là điều

kiện dừng của chương trình con đệ 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 cđn công nghiệp hà nội (Trang 28 - 30)

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

(186 trang)