Đệ quy: hàm gọi chính nó. Cần base case (trường hợp cơ sở) để dừng.
Code
def factorial(n):
if n == 1:
return 1
else:
return n * factorial(n - 1)
print("factorial(6) =", factorial(6)) # 720
print("factorial(15) =", factorial(15)) # 1307674368000
Đầu ra
factorial(6) = 720 factorial(15) = 1307674368000
Phân tích
factorial(6)= 6 * 5 * 4 * 3 * 2 * 1 = 720.- Base case:
n == 1trả về 1. - Recursive case:
n * factorial(n-1).
Lưu ý
- Python giới hạn độ sâu đệ quy mặc định ~1000 (
sys.getrecursionlimit()). - Với n lớn, dùng loop hoặc
math.factorial(C implementation, nhanh hơn). - Có thể tối ưu bằng
functools.lru_cache(memoization).
from functools import lru_cache
@lru_cache(maxsize=None)
def factorial(n):
if n <= 1:
return 1
return n * factorial(n - 1)