بازگشت
بازگشت به معنی برگشتن چیزی به خودش یا به نوع خودش است. مثال بسیار معروف از یک کلمه با خاصیت بازگشتی کلمهٔ gnu به معنی "gnu is not unix" است که هر بار بخواهید gnu را ترجمه کنید جمله جدیدتری ساخته میشود برای مثال در دفعهٔ بعدی جمله به صورت "gnu is not unix is not unix" در میآید و شما میتوانید این کار را بینهایت بار تکرار کنید. از اصلاح بازگشت در زبانشناسی و منطق بسیار استفاده میشود. همچنین در ریاضیات و علوم رایانه نوعی از تابع به نام توابع بازگشتی کاربرد بسیاری دارد.
در علوم رایانه
در علوم رایانه در پیادهسازی و برنامه نویسی مفاهیم مدل شده علاوه بر شی گرایی یکی از مفاهیم پر کاربرد توابع بازگشتی اند. در این توابع خروجی تابع می تواند فراخوانی دیگری از همان تابع باشد. برای مثال یکی از راه های پیادهسازی تابعی که مقدار فاکتوریل اعداد طبیعی 0 تا n را حساب می کند در زبان برنامه نویسی سی به شرح زیر است:
unsigned long long factorial(unsigned long long n)
{
if (n < 1)
return 1;
else
return n*factorial(n-1);
}
برای فهم آن فرض کنید مقدار factorial(1)
را می خواهیم پس مقدار n
برابر 1 است و شرط if
برقرار می شود و جواب 1 برگردانده می شود. برای صفر هم همین طور اما اگر مقدار عددی بزرگتر از یک را فراخوانی کنیم، شرط if
برقرار نشده و مقدار n*factorial(n-1)
برگردانده می شود یعنی مثلا اگر مقدار 3 را به تابع بفرستیم مقدار 3*factorial(2)
را بر می گرداند که خود فاکتوریل دو مقدارfactorial(1)*2
را برمیگرداند که باز خود فاکتوریل 1 همانطور که توضیح داده شد مقدار 1 را بر میگرداند و پروسه بازگشت همینجا ختم میشود پس در کل تابع مانند این رفتار کرد که مقدار 1*2*3
را برگردانده باشد و این همان فاکتوریل است. اما برای اینکه فایده ی این توابع را در برنامه نویسی بهتر متوجه شوید اگر می خواستیم این تابع را بدون بازگشت تعریف کنیم اینطور می شد:
unsigned long long factorial(unsigned n)
{
unsigned long long result=1;
while((n--)>1)
result *= n;
return result;
}
که با توجه به سطح پیچیدگی و خوانایی آن متوجه می شویم که تابع بازگشتی صورت ساده تری از پیاده سازی آن است.
جستارهای وابسته
منابع
- ↑ «The GNU Operating System and the Free Software Movement». www.gnu.org. دریافتشده در ۲۰۲۱-۰۸-۲۱.
- ↑ «C Program to Find Factorial of a Number Using Recursion». www.programiz.com. دریافتشده در ۲۰۲۲-۱۰-۰۹.