برنامه نویسی و ITپایتون

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

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

توابع بازگشتی پایتون چیست؟

تابع بازگشتی (recursive function) در زبان برنامه‌نویسی پایتون نوع تخصصی از تابع است که در کد خود، خود را به طور مکرر فراخوانی می‌کند و این فراخوانی تا زمانی ادامه می‌یابد که شرطی خاص برآورده شود که در این مرحله فراخوانی خود را متوقف می‌کند. برای مثال، تابع «fn()» زیر را در پایتون در نظر بگیرید:

def fn():
    # ...
    fn()
    # ...

در این قطعه کد، «fn()‎» یک تابع بازگشتی است زیرا خود را فراخوانی می‌کند. «…#» نشان‌دهنده کد دیگری است که بخشی از منطق تابع است.

با این حال، تابع بازگشتی پایتون ضروری است که شامل یک عبارت شرطی باشد که به عنوان شرط پایان عمل می‌کند. این شرط تعیین خواهد کرد که چه زمانی تابع باید خود را فراخوانی نکند و در عوض یک نتیجه را برگرداند یا یک عمل متفاوت را انجام دهد. یک ساختار معمولی برای توابع بازگشتی پایتون شامل عبارت «if» بوده که در زیر نشان داده شده است:

def fn():
# ...
if condition:
# stop calling itself
else:
fn()
# ...

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

پیشنهاد مطالعه: آموزش کار با انواع حلقه در پایتون

آموزش تابع بازگشتی پایتون

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

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

برای نشان دادن مفهوم یک تابع بازگشتی، اجازه دهید یک مثال ساده را در نظر بگیریم که در آن تابعی به نام «count_down()‎» ایجاد می‌کنیم. این تابع برای شمارش معکوس از یک عدد معین به صفر طراحی شده است.

برای مثال، اگر «count_down(3)» را فراخوانی کنیم، خروجی مورد نظر به صورت زیر است:

آموزش تابع بازگشتی پایتون

در اینجا تعریف اولیه تابع «count_down()‎» آمده است:

def count_down(start):
    """ Count down from a number  """
    print(start)

با این حال، فراخوانی این تابع با «count_down(3)» تنها عدد 3 را نمایش می‌دهد. برای رسیدن به رفتار شمارش معکوس مورد نظر، باید تابع را با مقادیر کاهشی فراخوانی کنیم، یعنی ابتدا 3، سپس 2 و در نهایت 1.

برای پیاده‌سازی این رویکرد، باید تابع «count_down()‎» را بازگشتی کنیم. در اینجا نسخه اصلاح شده تابع و فراخوانی آن آمده است:

def count_down(start):
    """ Count down from a number  """
    print(start)

    # call the count_down if the next
    # number is greater than 0
    next = start - 1
    if next > 0:
        count_down(next)


count_down(3)

هنگامی که این برنامه اجرا می‌شود، خروجی شمارش معکوس مورد انتظار را تولید می‌کند:

مثال برای تابع بازگشتی پایتون

تابع «count_down()‎» بازگشتی خود را فراخوانی می‌کند تا زمانی که عدد بعدی در دنباله شمارش معکوس بزرگ‌تر از صفر باشد. این الگوی بازگشتی تا زمانی که شمارش معکوس به صفر برسد ادامه می‌یابد و در این مرحله بازگشت متوقف می‌شود.

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

هنگامی که با وظیفه محاسبه مجموع یک دنباله، مانند مجموع اعداد از 1 تا 100 مواجه می‌شوید، یک رویکرد رایج شامل استفاده از یک حلقه for با تابع «range()‎» است. به مثال زیر توجه کنید:

def sum(n):
    total = 0
    for index in range(n+1):
        total += index

    return total


result = sum(100)
print(result)

خروجی این کد به صورت زیر خواهد بود:

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

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

  • sum(n) = n + sum(n-1)‎
  • sum(n-1) = n-1 + sum(n-2)
  • sum(0) = 0

در اینجا اجرای تابع «sum_sequence()‎» بازگشتی است:

def sum(n):
    if n > 0:
        return n + sum(n-1)
    return 0


result = sum(100)
print(result)

این نسخه بازگشتی از تابع به طور مشخصی مختصرتر و خواناتر است. همچنین، می‌توانید از عملگر سه‌تایی برای ساده‌تر کردن تابع «sum_sequence()‎» به صورت زیر استفاده کنید:

def sum(n):
    return n + sum(n-1) if n > 0 else 0


result = sum(100)
print(result)

با استفاده از این رویکرد بازگشتی، می‌توانید به طور مؤثر مجموع یک دنباله را محاسبه کنید و راه‌حل کوتاه‌تر و ظریف‌تری برای مسئله ارائه دهید.

پیشنهاد مطالعه: آموزش کار با لیست در پایتون

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

فاکتوریل یک عدد صحیح غیر منفی n با n نشان داده می‌شود! و به عنوان حاصل‌ضرب تمام اعداد صحیح مثبت از 1 تا n تعریف می‌شود. در اینجا یک تابع Python بازگشتی برای محاسبه فاکتوریل یک عدد صحیح غیر منفی داده شده است:

def factorial(n):
    if n == 0 or n == 1:
        return 1
    else:
        return n * factorial(n - 1)

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

  • حالت پایه: تابع بررسی می‌کند که آیا n برابر با 0 یا 1 است. اگر یکی از این شرایط وجود داشته باشد، تابع 1 را برمی‌گرداند. این به این دلیل است که فاکتوریل 0 و 1 1 است.
  • حالت بازگشتی: اگر n برابر با 0 یا 1 نباشد، تابع n * فاکتوریل (n – 1) را محاسبه می‌کند. اینجاست که بازگشت اتفاق می‌افتد. تابع خود را با آرگومان n – 1 فراخوانی می‌کند، به این معنی که فاکتوریل عدد یک را کمتر از n محاسبه خواهد کرد. این فرآیند به صورت بازگشتی ادامه می‌یابد تا زمانی که n به 0 یا 1 تبدیل شود، در این مرحله حالت پایه فعال می‌شود و بازگشت شروع به باز شدن می‌کند.

بیایید اجرای فاکتوریل (4) را به عنوان مثال دنبال کنیم:

factorial(4)
  --> returns 4 * factorial(3)
        --> returns 3 * factorial(2)
            --> returns 2 * factorial(1)
                --> returns 1  (base case)
            <-- returns 2 * 1 = 2
        <-- returns 3 * 2 = 6
  <-- returns 4 * 6 = 24

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

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

  • محاسبه سری فیبوناچی در پایتون به صورت بازگشتی
  • محاسبه ب م م عدد به صورت بازگشتی
  • و غیره

پیشنهاد مطالعه: آموزش کار با متغیرها در پایتون

سخن پایانی

تابع بازگشتی نوعی ساختار برنامه‌نویسی است که در آن یک تابع به طور مکرر خود را فراخوانی می‌کند تا زمانی که یک شرط پایان خاص برآورده شود. این الگوی تکرارشونده یک جنبه اساسی توابع بازگشتی است.

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

آموزش پایتون

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

منبع: pythontutorial

 

کامل بهرامی

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

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا