ویدیو آموزش تابع بازگشتی در پایتون
قبلا در رابطه با ساخت توابع پایتون و آموزش عمیق توابع پایتون ویدیوهایی را دیدید. در این ویدیو با توابع بازگشتی در پایتون آشنا خواهید شد و نحوه ساخت و استفاده از توابع بازگشتی پایتون را می آموزید. در نهایت با مثال های کاربردی یاد میگیرید که چطور از توابع بازگشتی برای ساده کردن کد پایتون استفاده کنید.
یادگیری مفهوم بازگشت یا Recursion در پایتون بسیار مهم است زیرا الگوریتم های معروفی مانند جستجوی درختی، محاسبه فاکتوریل، پیمایش گراف، دنباله فیبوناچی و بسیاری دیگری، بر پایه بازگشت طراحی شده اند.
# تابع بازگشتی (Recursive function) چیست؟
تابع بازگشتی به تابعی گفته می شود که خودش را صدا میزند و هدف آن این است که یک مسئله بزرگ را به مسائل کوچکتر تقسیم کرده و آن را حل کند. تابع بازگشتی تا زمانی خودش را اجرا می کند که به یک شرط توقف برسد. شرط توقف یا Base Case مشخص میکند که در چه شرایطی تابع دیگر نباید خودش را صدا بزند.
اگر شرط توقف وجود نداشته باشد، تابع خودش را به شکل بی نهایت فراخوانی میکند و در انتها با خطای RecursionError مواجه شود.
دوره پیشنهادی: دوره آموزش الگوریتم نویسی برای مصاحبه شغلی پایتون
# ساختار تابع بازگشتی در پایتون
کاربرد توابع بازگشتی در پایتون، اغلب در کنار ساختارهای داده و الگوریتم هایی مانند نمودارها و جستجوهای باینری است. در پایتون برای تعریف یک تابع بازگشتی نیاز به دو بخش دارید:
- ✅ شرط توقف فراخوانی که به آن Base Case گفته می شود
- ✅ فراخوانی بازگشتی که به آن Recursive Call گفته می شود
برای درک بهتر ساختار تابع بازگشتی در پایتون به کد زیر دقت کنید:
def function(parameter):
if stop_condition:
return value
return function(smaller_problem)
شرط توقف مهم ترین بخش تابع بازگشتی است. اگر شرایطی را ایجاد نکنید که تابع متوقف شود، تا بینهایت اجرا شده و برنامه با خطا مواجه خواهد شد.
دوره پیشنهادی: دوره آموزش رایگان پایتون
# مثال فاکتوریل با تابع بازگشتی پایتون
فاکتوریل به فرمولی گفته میشود که در آن هر عدد طبیعی در تمام اعداد کوچکتر از خودش به جز صفر ضرب میشود. فاکتوریل با علامت تعجب نمایش داده می شود. مثلا:
5! = 5 × 4 × 3 × 2 × 1
برای محاسبه فاکتوریل با پایتون میتوانید به سادگی از تابع بازگشتی استفاده کنید. به مثال زیر دقت کنید:
def factorial(n):
if n == 1:
return 1
return n * factorial(n - 1)
print(factorial(5))
در این مثال، قطعه کد if n == 1 یک شرط توقف است که مشخص میکند اگر مقدار n به عدد 1 رسید، فراخوانی بازگشتی متوقف شود.
# مثال معکوس کردن رشته با تابع بازگشتی پایتون
اگر بخواهید یک String را معکوس کنید، میتوانید از توابع بازگشتی پایتون کمک بگیرید. به مثال زیر دقت کنید:
def reverse_string(text):
if len(text) == 0:
return ""
return reverse_string(text[1:]) + text[0]
print(reverse_string("Python"))
باز هم در این مثال قطعه کد if len(text) == 0 شرط توقف است که مشخص میکند اگر تعداد کاراکترهای رشته به صفر رسید، فراخوانی بازگشتی تابع متوقف شود.
ویدیو پیشنهادی: حلقه for در پایتون
# تفاوت حلقه و تابع بازگشتی در پایتون
در جدول زیر میتوانید تفاوت هایی که بین حلقه ها و توابع بازگشتی در پایتون وجود دارد را ببینید و بهتر تصمیم گیری کنید:
| حلقه | تابع بازگشتی |
|---|---|
| سرعت بیشتر | خوانایی بیشتر کد |
| مناسب محاسبات تکراری | مناسب مسائل درختی |
| نیاز به شرط توقف | نیاز به شرط توقف |
| مصرف حافظه کمتر | مصرف حافظه بیشتر |
# نکات استفاده از تابع بازگشتی در پایتون
برای استفاده از توابع بازگشتی پایتون همیشه به نکات زیر دقت کنید:
- ✅ همیشه ابتدا شرط پایان را مشخص کنید.
- ✅ در هر فراخوانی بازگشتی، مسئله را کوچکتر کنید.
- ✅ از فراخوانی های غیر ضروری بپرهیزید.
- ✅ قبل از استفاده در پروژه های بزرگ، حتما عملکرد تابع بازگشتی را اندازه گیری کنید.
- ✅ برای داده های بزرگ بهتر است از حلقه ها یا تکنیک های بهینه سازی مثل Memoization استفاده کنید.
# مزایا و معایب تابع بازگشتی
استفاده از توابع بازگشتی مزایای زیادی برای شما دارد:
- ⚫ خوانایی بالای کد
- ⚫ کاهش حجم کد
- ⚫ مناسب الگوریتم های پیچیده
- ⚫ مناسب برای درخت ها و گراف ها
- ⚫ پیاده سازی ساده الگوریتم های Divide and Conquer
اما توابع Recursion معایبی نیز دارند:
- ⚫ مصرف زیاد حافظه
- ⚫ سرعت کندتر نسبت به حلقه ها
- ⚫ مناسب نبودن برای الگوریتم هایی که نیاز به فراخوانی زیاد دارند
- ⚫ امکان ایجاد خطای RecursionError در برنامه
# نتیجه گیری
تابع بازگشتی پایتون یکی از مفاهیم اساسی است که هر برنامه نویس باید به آن مسلط باشد. در بسیاری از مسائل استفاده از حلقه ها از نظر کارایی مناسب تر است، اما در موضوعاتی مانند پیمایش درخت ها، جستجوی بازگشتی یا Backtracking، توابع بازگشتی عملکرد بهتری دارند.
ارسال نظر