Giai thừa¶
Tóm lược nội dung
Bài này trình bày bài toán tính giai thừa bằng kỹ thuật đệ quy.
Bài toán¶
Yêu cầu:
Sử dụng kỹ thuật đệ quy, viết chương trình tính \(n!\).
Biết rằng \(0! = 1\) và \(1! = 1\).
Input:
Số nguyên dương \(n\).
Output:
Một số nguyên là giai thừa của \(n\).
Test case:
| STT | Input | Output |
|---|---|---|
| 1 | 0 | 1 |
| 2 | 1 | 1 |
| 3 | 6 | 720 |
| 4 | 21 | 51090942171709440000 |
Bài giải đề xuất¶
Ý tưởng chính
Ta có công thức truy hồi tính giai thừa như sau:
Theo công thức trên:
-
Trường hợp cơ sở: \(n == 0\) hoặc \(n == 1\).
Không cần gọi đệ quy nữa, mà chỉ trả về
1. -
Trường hợp đệ quy: các giá trị \(n\) còn lại. Giả sử không nhập
nnguyên âm.Hàm sẽ gọi lại chính nó, tham số truyền vào là
n - 1để tính \((n - 1)!\), rồi nhân thêm \(n\).Ví dụ:
Để tính \(5!\), hàm sẽ gọi lại chính nó để tính \((5 - 1)! = 4!\), rồi nhân thêm \(5\).Cụ thể:
- Hàm
factorial(5)gọi đệ quyfactorial(4). - Hàm
factorial(4)gọi đệ quyfactorial(3). - Hàm
factorial(3)gọi đệ quyfactorial(2). - Hàm
factorial(2)gọi đệ quyfactorial(1). - Hàm
factorial(1)không gọi đệ quy nữa, mà sẽ trả về1.
- Hàm
Viết chương trình
1. Viết hàm factorial() gồm có một tham số là n.
2. Viết chương trình chính:
- Cho người dùng nhập vào một số nguyên dương, lưu vào biến
number. - Gọi hàm
factorial()ra thực hiện, lưu kết quả vào biếnresult. - In ra kết quả.
3. Chạy chương trình, nhập vào 6, kết quả như sau:
Mã nguồn¶
Code đầy đủ được đặt tại: