Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Viết hàm Python đệ quy tính giai thừa

Đệ 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 == 1 trả 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)