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.