بازگشت/بازگشتی (Recursion)
بازگشت/بازگشتی (Recursion) یعنی یک تابع خودش را صدا بزند. با این کار، مسئله سخت به چند مسئله ساده می شکند. مثل حل تمرین بزرگ، بخش بخش و مرحله ای.
تعریف بازگشت/بازگشتی
در بازگشت، تابع تا رسیدن به حالت پایه ادامه می دهد. حالت پایه یعنی جایی که دیگر خودتابع را صدا نزنیم.
مثال جمع بازگشتی
این کد مجموع اعداد 1 تا k را بازگشتی حساب می کند.
int sum(int k) {
if (k > 0) {
return k + sum(k - 1);
} else {
return 0;
}
}
int main() {
int result = sum(10);
cout << result;
return 0;
}
نکته: وقتی k صفر شود، بازگشت متوقف می شود. بنابراین برنامه نتیجه را برمی گرداند.
شمارش معکوس بازگشتی
در این مثال، تا رسیدن به صفر، شمارش معکوس چاپ می شود.
void countdown(int n) {
if (n > 0) {
cout << n << " ";
countdown(n - 1);
}
}
int main() {
countdown(5);
}
هشدار: اگر حالت پایه نداشته باشی، برنامه هرگز تمام نمی شود.
فاکتوریل بازگشتی
این کد فاکتوریل 5 را با بازگشت محاسبه می کند.
int factorial(int n) {
if (n > 1) {
return n * factorial(n - 1);
} else {
return 1;
}
}
int main() {
cout << "Factorial of 5 is " << factorial(5);
return 0;
}
گام های عملی
- مسئله را به زیرمسئله ساده تقسیم کن.
- حالت پایه پایان را مشخص کن.
- تابع را با ورودی مناسب فراخوانی کن.
نکته: بازگشت زیباست؛ اما مراقب مصرف حافظه باش.
مطالعه بیشتر
منبع: C++ Recursion. برای مفاهیم مرتبط، بخش بارگذاری هم نام و مقادیر بازگشتی را ببین.
جمع بندی سریع
- بازگشت یعنی صدا زدنِ خود تابع.
- همیشه حالت پایه تعریف کن.
- زیرمسئله ها را ساده نگه دار.
- حواست به کارایی و حافظه باشد.