بکندباز

تابع بازگشتی چیست؟

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

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

همانطور که می دانید فاکتوریل یک عدد، یعنی ضرب آن عدد در اعداد کوچکتر از خود (تا عدد 1). یعنی فاکتوریل 6 برابر است با:

6! = 1×2×3×4×5×6

در نتیجه فاکتوریل هر عدد برابر است با حاصل ضرب آن عدد در فاکتوریل عدد قبلی:

6! = 5! × 6

5! = 4! × 5

4! = 3! × 4

3! = 2! × 3

2! = 1! × 2

1! = 1

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

کد این مسئله  (با پایتون):

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

print(factorial(6))

توجه داشته باشید که حتماً باید شرطی در کد داشته باشیم که در آنجا فراخوانی تابع را متوقف کنیم. در غیر اینصورت تابع تا ابد ادامه می یابد.

backendbaz

مدیر وب سایت بکندباز

دیدگاه‌ها

*
*

    melodi پاسخ

    سلام خسته نباشید. یه سوال داشتم چرا 1 رو return میکنه؟

      zohreh پاسخ

      سلام. سلامت باشید.

      ببینید می دونیم که فاکتوریل 1 برابر با 1 هست. پس اگر ورودی 1 باشه خروجی باید 1 برگردونده بشه.

      توی توابع بازگشتی، از اونجایی که خود تابع return میشه، برای اینکه در یک جا این فراخوانی تابع متوقف بشه و بتونیم از تابع خارج بشیم باید در یک جا یک شرطی قرار بدیم که وقتی اون شرط برقرار میشه دیگه تابع فراخوانی نشه و به جاش یک مقدار ثابت برگردونده بشه.

      در اینجا برای برگردوندن یک مقدار ثابت از کمترین مقدار توی فاکتوریل یعنی همون 1 استفاده کردیم. چون فاکتوریل هر عددی رو که بخوایم حساب کنیم از همون عدد شروع می کنیم و یکی یکی در فاکتوریل های عدد های کوچکتر ضرب می کنیم تا زمانی که به عدد 1 برسیم.

    melodi پاسخ

    متشکرم از توضیحاتتون.
    ولی اگر بخوام مثلا a به توان b رو بصورت بازگشتی محاسبه کنم به چه صورتی میشه ؟

      zohreh پاسخ

      برای a به توان b در واقع باید به تعداد b بار، a رو در خودش ضرب کنید. پس باید عدد b رو به عنوان تعداد بازگشت ها در نظر بگیرد و هر بار یکی از b کم کنید. و زمانی که b برابر با 1 شد یعنی یک a فقط باقی می مونه، که در نتیجه خود a رو برمیگردونید:

      کد:

      https://backendbaz.ir/online-editor/python/15092

    zeynab پاسخ

    سلام میشه a*b رو به صورت بازگشی با عدد مثال بزنید

      zohreh پاسخ

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

      def multiply_recursive(a, b):
          if b == 0:
              return 0
          elif b > 0:
              return a + multiply_recursive(a, b - 1)
          else:
              return -multiply_recursive(a, -b)
      
      a = 3
      b = 4
      result = multiply_recursive(a, b)
      print(f'{a} * {b} = {result}')
      

       

      در این مثال، تابع `multiply_recursive` دو عدد `a` و `b` را به صورت بازگشتی ضرب می‌کند. این تابع ابتدا برای حالت‌های پایه (هنگامی که b برابر با 0 باشد) مقدار 0 را برمی‌گرداند. سپس برای مقادیر مثبت b، عدد a را b بار با خودش جمع می‌کند. و برای مقادیر منفی b، عدد a را با -b ضرب کرده و نتیجه را منفی می‌کند. در نهایت، نتیجه ضرب به صورت بازگشتی محاسبه می‌شود و نمایش داده می‌شود.

        zeynab پاسخ

        الان این کد اشتباه برای a*b
         
        int zarb(int a,int b)
        }
        if(b==1)
        ;return a
        else{
        ;return a+zarb(a,b-1)

          zohreh پاسخ

          خیر. منطقاً درسته. برای ضرب دو عدد مثبت در هم.