تابع بازگشتی (Recursive Function)

اصلاح شده

2026-08-20

def factorial(n):
    if n == 0:          # حالت پایه
        return 1
    else:                # حالت بازگشتی
        return n * factorial(n - 1)

print(factorial(5))   # 120
factorial(3)
= 3 * factorial(2)
= 3 * (2 * factorial(1))
= 3 * (2 * (1 * factorial(0)))
= 3 * (2 * (1 * 1))
= 6
هشدارنکته

اگه حالت پایه تعریف نشه یا هیچ‌وقت برقرار نشه، تابع بی‌نهایت خودش رو صدا می‌زنه و در نهایت خطای RecursionError می‌ده.

def fib(n):
    if n <= 1:              # حالت پایه
        return n
    return fib(n - 1) + fib(n - 2)   # حالت بازگشتی

print(fib(6))   # 8

مقایسه با حلقه (Loop)

  • خیلی از مسائل بازگشتی رو می‌شه با حلقه هم حل کرد
  • بازگشت معمولاً خواناتر ولی حلقه معمولاً بهینه‌تر (از نظر حافظه) هست
# نسخه بازگشتی
def factorial_recursive(n):
    if n == 0:
        return 1
    return n * factorial_recursive(n - 1)

# نسخه حلقه‌ای
def factorial_loop(n):
    result = 1
    for i in range(1, n + 1):
        result *= i
    return result