در این آموزش یاد خواهید گرفت که یک تابع بازگشتی ایجاد کنید. تابعی که خودش را فرا می خواند.
یک تابع که خود را فراخوانی می کند به نام تابع بازگشتی شناخته می شود. و این تکنیک به عنوان بازگشت شناخته می شود.
توابع بازگشتی در C++ چگونه کار می کنند؟
void recurse()
{
… .. …
recurse();
… .. …
}
int main()
{
… .. …
recurse();
… .. …
}
شکل زیر نشان می دهد که تابع چگونه با فراخوانی خود بارها و بارها کار می کند.
فراخوانی تا زمانی که بعضی شرایط برقرار باشند، ادامه می یابد.
برای جلوگیری از ایجاد بازگشت بی نهایت، ساختار if .. else (یا رویکرد مشابه) استفاده می شود که در آن یک شاخه فراخوانی بازگشتی را انجام می دهد و دیگری این کار را نمی کند.
مثال ۱ : محاسبه ی فاکتوریل عدد با تابع بازگشتی
// Factorial of n = 1*2*3*…*n
#include <iostream>
using namespace std;
int factorial(int);
int main()
{
int n;
cout<<“Enter a number to find factorial: “;
cin >> n;
cout << “Factorial of ” << n <<” = ” << factorial(n);
return 0;
}
int factorial(int n)
{
if (n > 1)
{
return n*factorial(n-1);
}
else
{
return 1;
}
}
خروجی
Enter a number to find factorial: 4
Factorial of 4 = 24
توضیح: مثال بالا چگونه کار می کند؟
فرض کنید کاربر عدد ۴ را وارد می کند، که به تابع ()factororial فرستاده شده است.
۱- در اولین فراخوانی تابع ()factorial شرط if درست است. بعد
factorial(num-1) return num*
اجرا می شود که تابع factorial را برای دومین بار صدا می زند. آرگومان ارسالی به آن ۳ (num-1) است.
۲- در دومین فراخوانی تابع ()factorial، شرطif درست است. بعد
factorial(num-1) return num*
اجرا می شود که تابع factorial را برای سومین بار صدا می زند. آرگومان ارسالی به آن ۲ (num-1) است.
۳- در سومین فراخوانی تابع ()factorial، شرط if درست است. بعد
factorial(num-1) return num*
اجرا می شود که تابع factorial را برای چهارمین بار صدا می زند. آرگومان ارسالی به آن ۱ (num-1) است.
۴- در چهارمین فراخوانی تابع ()factorial، شرط if نادرست است. بعد return 1 اجرا می شود که ۱ را به سومین تابع ()factorial ارسال می کند.
۵- سومین تابع factorial() ۲ را به دومین تابع ()factorial ارسال می کند.
۶- دومین تابع factorial() ۶ را به اولین تابع ()factorial ارسال می کند.
۷- در نهایت، اولین تابع factorial() ۲۴ را به ()main ارسال می کند که بر روی صفحه نمایش داده می شود.