Giai thừa (factorial) của số nguyên dương n (ký hiệu n!) là tích các số từ 1 đến n. Python có 3 cách phổ biến:
Cách 1: Vòng lặp for
n = int(input("Nhập số: "))
factorial = 1
if n >= 1:
for i in range(1, n + 1):
factorial *= i
print(f"Giai thừa của {n} là: {factorial}")
Kết quả
Nhập số: 5 Giai thừa của 5 là: 120
Cách 2: Đệ quy (Recursion)
def factorial_recursive(n):
if n <= 1:
return 1
return n * factorial_recursive(n - 1)
num = int(input("Nhập số: "))
print(factorial_recursive(num))
Kết quả
Nhập số: 5 120 Nhập số: -2 1 # Lưu ý: cần xử lý trường hợp âm
Cách 3: math.factorial() - Khuyến nghị
import math
num = int(input("Nhập số: "))
print(f"Giai thừa của {num} là: {math.factorial(num)}")
Kết quả
Nhập số: 5 Giai thừa của 5 là: 120 Nhập số: 3.6 ValueError: invalid literal for int() with base 10: '3.6'
So sánh
| Cách | Ưu điểm | Nhược điểm |
|---|---|---|
| Vòng lặp | Dễ hiểu, không giới hạn stack | Code dài hơn |
| Đệ quy | Ngắn gọn, tư duy toán học | Gọi stack sâu → RecursionError cho n lớn |
| math.factorial() | Tối ưu C, xử lý lỗi, nhanh nhất | Cần import math |
Khuyến nghị: Dùng math.factorial() cho production code.