TGViewer
آموزش پایتون و برنامه نویسی آموزش پایتون و برنامه نویسی @python_with_mohammad · 764 subscribers
Post #29 1.2K
توابع بازگشتی در پایتون

مقدمه

توابع بازگشتی (Recursive Functions) توابعی هستند که درون خودشان فراخوانی می‌شوند. این نوع توابع معمولاً برای حل مسائلی که می‌توانند به زیرمسائل مشابه تقسیم شوند، استفاده می‌شوند. استفاده از توابع بازگشتی می‌تواند کد را ساده‌تر و مختصرتر کند، به‌شرطی که با دقت پیاده‌سازی شوند.

در این پست، به بررسی مفهوم توابع بازگشتی در پایتون، نحوه‌ی کارکرد آن‌ها و مثال‌های متنوع خواهیم پرداخت.

ساختار تابع بازگشتی

یک تابع بازگشتی معمولاً شامل دو بخش اصلی است:
1. پایه (Base Case): شرطی که باعث می‌شود تابع متوقف شود. برای مثال، اگر به یک عدد خاص برسیم، تابع دیگر خود را فراخوانی نمی‌کند.
2. حالت بازگشتی (Recursive Case): قسمتی از تابع که در آن تابع خودش را با مقادیری تغییر یافته فراخوانی می‌کند.

مثال 1: محاسبه فاکتوریل

فاکتوریل یک عدد طبیعی \( n \) به صورت \( n! \) تعریف می‌شود و به صورت زیر محاسبه می‌شود:
- \( 0! = 1 \)
- \( n! = n \times (n-1)! \) برای \( n > 0 \)

در اینجا یک تابع بازگشتی برای محاسبه فاکتوریل در پایتون داریم:

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

# مثال استفاده
num = 5
print(f"فاکتوریل {num} برابر است با: {factorial(num)}")


خروجی:
فاکتوریل 5 برابر است با: 120


مثال 2: سری فیبوناچی

سری فیبوناچی یک دنباله عددی است که در آن هر عدد مجموع دو عدد قبلی خود است:
- \( F(0) = 0 \)
- \( F(1) = 1 \)
- \( F(n) = F(n-1) + F(n-2) \) برای \( n > 1 \)

اینجا تابعی بازگشتی برای محاسبه یک عدد در سری فیبوناچی داریم:

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

# مثال استفاده
n = 6
print(f"عدد فیبوناچی {n} برابر است با: {fibonacci(n)}")


خروجی:
عدد فیبوناچی 6 برابر است با: 8


مثال 3: جمع اعداد از 1 تا n

می‌توانیم با استفاده از تابع بازگشتی، مجموع اعداد از 1 تا \( n \) را محاسبه کنیم. فرمول آن به صورت زیر است:
- \( sum(n) = n + sum(n - 1) \) برای \( n > 0 \)
- \( sum(0) = 0 \)

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

# مثال استفاده
n = 5
print(f"مجموع اعداد از 1 تا {n} برابر است با: {sum_of_n(n)}")


خروجی:
مجموع اعداد از 1 تا 5 برابر است با: 15


نکات مهم در مورد توابع بازگشتی

- پایه‌ها: حتماً باید پایه‌‌هایی برای شکست تابع در نظر بگیرید تا از یک حلقه بی‌پایان جلوگیری شود.
- کارایی: توابع بازگشتی ممکن است باعث افزایش مصرف حافظه و زمان اجرا شوند. برای مثال، تابع فیبوناچی به دلیل تکرار محاسبات برای اعداد قبلی، کارایی پایینی دارد. در این موارد می‌توانید از روش‌های دیگر (مثل برنامه‌نویسی دینامیک) استفاده کنید.
- خوانایی کد: یکی از مزایای توابع بازگشتی، خوانایی بالای کد است. با دیدن تابع، معمولاً راحت‌تر می‌توان فهمید که الگوریتم چه کار می‌کند.

نتیجه‌گیری

توابع بازگشتی یک ابزار بسیار مفید در برنامه‌نویسی پایتون هستند و می‌توانند به سادگی برخی مسائل را حل کنند. مهم است که هنگام استفاده از این توابع، به دقت پایه‌ها و حالت‌های بازگشتی را تعیین کنیم تا از ایجاد مشکلات مانند بازگشت بی‌پایان جلوگیری کنیم.


امیدوارم که این توضیحات و مثال‌ها به شما در درک توابع بازگشتی کمک کند. اگر سوالی دارید یا نیاز به مثال‌های بیشتری دارید، خوشحال می‌شوم که کمک کنم! 🌟

@python_with_mohammad
  • 👍 1
More from @python_with_mohammad
  1. Sep 10, 2025درسنامه ایجنت‌های هوشمند (AI Agents) این نسخه ، برای اشنایی اولیه با AI Agents هست، لذا سع…
  2. Sep 4, 2025🚀 آینده هوش مصنوعی همین‌جاست و شما می‌توانید آن را بسازید! 🚀 تا حالا به این فکر کردی که…
  3. Aug 22, 2025🚀 می‌خوای پایتون یاد بگیری اما نمی‌دونی از کجا شروع کنی؟ من یک دوره‌ی آنلاین نیمه خصوصی م…
  4. Aug 5, 2025Post #126
  5. Aug 2, 2025قسمت ۱۳ ام ، فصل پردازش داده ها و یادگیری ماشین با داده های پزشکی موضوع: ارزیابی مدل و برر…
  6. Aug 2, 2025فصل پانزدهم دوره جامع پایتون و هوش مصنوعی با موضوع «پردازش و یادگیری ماشین با داده های عدد…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →