Tính giai thừa trong Python bằng vòng lặp
6! = 720. Nhân dần bằng vòng lặp, rồi so sánh với math.factorial.
- Định nghĩa n!
- Nhân dồn trong vòng lặp
- Từ chối số âm
Nhân 1 × 2 × ... × n
Giai thừa của một số nguyên không âm n, ký hiệu n!, là tích của tất cả các số nguyên từ 1 đến n. Ví dụ 5! = 1 × 2 × 3 × 4 × 5 = 120. Theo quy ước, 0! = 1, còn giai thừa của số âm thì không được định nghĩa.
Những điểm quan trọng
- Cho result bắt đầu bằng 1, nhờ đó 0! = 1 cũng đúng.
- Nhân với mọi i trong
range(2, n + 1). - Số nguyên Python không bị tràn, nên 50! vẫn tính được.
Khi nào nên sử dụng?
- Làm quen với cú pháp và các khái niệm cơ bản của Python qua những ví dụ ngắn, dễ hiểu.
- Xây dựng nền tảng vững chắc trước khi chuyển sang các bài toán phức tạp hơn.
- Chạy thử code ngay trên trình duyệt mà không cần cài đặt Python trên máy.
Code ví dụ
def factorial(number):
if number < 0:
raise ValueError("Factorial is undefined for negative numbers")
result = 1
for value in range(2, number + 1):
result *= value
return result
print(factorial(6))
Kết quả khi chạy
720
Giải thích code
Hàm factorial() báo lỗi ValueError nếu số truyền vào là số âm. Biến result bắt đầu bằng 1 để kết quả của 0! và 1! vẫn đúng, sau đó vòng lặp nhân lần lượt với từng số từ 2 đến n. Với n = 6, kết quả là 720.
Thay đổi giá trị và chạy chương trình bằng trình chạy Python online của CodeUtility mà không cần cài Python.
Bài tập mở rộng
Hãy thử chỉnh sửa code theo các gợi ý dưới đây. Tự thay đổi và quan sát kết quả sẽ giúp bạn hiểu bài sâu hơn nhiều so với chỉ đọc code.
- Thay đổi dữ liệu đầu vào và đoán trước kết quả rồi mới chạy để kiểm tra.
- Thêm phần kiểm tra cho trường hợp dữ liệu rỗng hoặc không hợp lệ.
- Đưa phần xử lý vào một hàm riêng và thử với nhiều bộ dữ liệu khác nhau.
Luyện tập với thử thách
Áp dụng kiến thức của bài học này để giải một bài toán thực tế. Mỗi thử thách chạy ngay trên trình duyệt, có kiểm thử tức thì và AI nhận xét.
- Giai thừa Nhân tất cả các số nguyên dương từ 1 đến n. Dễ
- Power by Repeated Multiplication Raise a number to a power with a loop. Dễ