توابع بازگشتی در C — چطور تابع خودش را صدا میزند؟ مدیر ارشد رایشمند / یکشنبه, 08 اسفند,1395 / دستهها: آموزش برنامه نویسی, آموزش زبان برنامه نویسی سی C سلام رفقای برنامهنویس! توی این مقاله میخوایم با یه مبحث خیلی مهم و کاربردی آشنا بشیم: تابع بازگشتی در زبان C. یعنی تابعی که خودش دوباره خودش رو صدا میزنه! 😄 این سبک از تعریف تابع معمولاً برای حل مسائل پیچیده یا شکستن یه مسئله به زیرمسئلههای کوچیکتر استفاده میشه. تابع بازگشتی یعنی چی؟ تابع بازگشتی یا Recursive Function یعنی یه تابع در تعریف خودش خودش رو دوباره فراخوانی کنه. وقتی فراخوانی پشتسرهم اتفاق بیفته، باید یه نقطه توقف داشته باشه که بهش میگن شرط پایه یا Base Case. تا وقتی اون شرط برقرار نشده، تابع خودش رو صدا میزنه، ولی وقتی به شرط پایه رسید، برگشت اتفاق میافته و مرحله به مرحله نتیجهها جمع میشن. یه نمونهی کلاسیک از استفاده از توابع بازگشتی، محسابه فاکتوریل یک عدد هست. تابع فاکتوریل 𝑛! به صورت بازگشتی به صورت زیر تعریف میشه: factorial(𝑛)={1if 𝑛=0𝑛×factorial(𝑛−1)if 𝑛>0factorial(n)={1n×factorial(n−1)if n=0if n>0 چطور تابع خودش رو صدا میزنه؟ void callMe() { // انجام کارها callMe(); // تابع خودش رو صدا میزنه } int main() { callMe(); // شروع اولیه از main return 0; } اگه شرط توقف نذاریم، همینطوری خودش رو صدا میزنه تا حافظه پر بشه و برنامه کرش کنه! پس حتماً باید توی کد، یه شرط بذاریم که تابع متوقف بشه. مثال بازنویسیشده: مجموع اعداد طبیعی با تابع بازگشتی توی این برنامه میخوایم مجموع اعداد طبیعی رو تا عدد واردشده حساب کنیم، ولی با تابعی که خودش خودش رو صدا میزنه: #include <stdio.h> int naturalSum(int num); // نمونه اولیه int main() { int userInput, result; printf("Enter a number greater than zero: "); scanf("%d", &userInput); result = naturalSum(userInput); // فراخوانی تابع بازگشتی printf("Sum = %d", result); return 0; } int naturalSum(int num) { if (num != 0) return num + naturalSum(num - 1); // فراخوانی بازگشتی else return 0; // شرط توقف } خروجی نمونه: Enter a number greater than zero: 4 Sum = 10 اگه عدد 4 وارد کنیم، تابع اول خودش رو با 3 صدا میزنه، بعد با 2، بعد 1، و نهایتاً با 0. وقتی عدد به 0 رسید، شرط else اجرا میشه و تابع دیگه خودش رو صدا نمیزنه. جوابها مرحلهبهمرحله برمیگردن و جمع میشن تا مجموع نهایی حساب شه. مزایا و معایب تابع بازگشتی ✅ کد رو کوتاه و خوانا میکنه ✅ مخصوص الگوریتمهای شکستی و پیمایشی مثل درختها، مرتبسازیها و الگوریتمهای گراف ⚠️ اگه شرط توقف نداشته باشه، باعث حلقه بینهایت و کمبود حافظه میشه ⚠️ نسبت به حلقهها ممکنه کمی کندتر باشه چون حافظه بیشتری مصرف میکنه مثلاً توی الگوریتم Quick Sort یا پیمایش DFS در درختها و گرافها، تابع بازگشتی خیلی کارایی داره و باعث ساختار منظمتر کد میشه. امیدواریم این آموزش براتون مفید بوده باشه! این مقاله توسط سایت علمی رایشمند برای شما آماده شده است. چهار روش تعریف تابع در C برای بررسی عدد اول — با مثالهای مرحلهبهمرحله کلاسهای حافظه در C — چهار سبک نگهداری متغیرها با مثالهای واضح پرینت 50 رتبه بندی این مطلب: بدون رتبه کلمات کلیدی: آموزش زبان برنامه نویسی سی مدیر ارشد رایشمندمدیر ارشد رایشمند سایر نوشته ها توسط مدیر ارشد رایشمند تماس با نویسنده مطالب مرتبط کلاسهای حافظه در C — چهار سبک نگهداری متغیرها با مثالهای واضح چهار روش تعریف تابع در C برای بررسی عدد اول — با مثالهای مرحلهبهمرحله توابع تعریفشده توسط کاربر در زبان C به همراه آموزش و مثال تابع در برنامهنویسی C آموزش کامل به همراه مثال دستور goto در برنامه نویسی C نوشتن یک نظر نام: لطفا نام خود را وارد نمایید. ایمیل: لطفا یک آدرس ایمیل وارد نمایید لطفا یک آدرس ایمیل معتبر وارد نمایید نظر: لطفا یک نظر وارد نمایید موافقم این فرم نام، ایمیل، آدرس IP و محتوای شما را جمعآوری میکند تا بتوانیم نظرات درج شده در وبسایت را پیگیری کنیم. برای اطلاعات بیشتر خطمشی رازداری و شرایط استفاده< /a> که در آن اطلاعات بیشتری در مورد مکان، چگونگی و چرایی ذخیره داده های شما دریافت خواهید کرد. شما باید این قوانین را بخوانید و قبول کنید. افزودن نظر
سلام رفقای برنامهنویس! توی این مقاله میخوایم با یه مبحث خیلی مهم و کاربردی آشنا بشیم: تابع بازگشتی در زبان C. یعنی تابعی که خودش دوباره خودش رو صدا میزنه! 😄 این سبک از تعریف تابع معمولاً برای حل مسائل پیچیده یا شکستن یه مسئله به زیرمسئلههای کوچیکتر استفاده میشه. تابع بازگشتی یعنی چی؟ تابع بازگشتی یا Recursive Function یعنی یه تابع در تعریف خودش خودش رو دوباره فراخوانی کنه. وقتی فراخوانی پشتسرهم اتفاق بیفته، باید یه نقطه توقف داشته باشه که بهش میگن شرط پایه یا Base Case. تا وقتی اون شرط برقرار نشده، تابع خودش رو صدا میزنه، ولی وقتی به شرط پایه رسید، برگشت اتفاق میافته و مرحله به مرحله نتیجهها جمع میشن. یه نمونهی کلاسیک از استفاده از توابع بازگشتی، محسابه فاکتوریل یک عدد هست. تابع فاکتوریل 𝑛! به صورت بازگشتی به صورت زیر تعریف میشه: factorial(𝑛)={1if 𝑛=0𝑛×factorial(𝑛−1)if 𝑛>0factorial(n)={1n×factorial(n−1)if n=0if n>0 چطور تابع خودش رو صدا میزنه؟ void callMe() { // انجام کارها callMe(); // تابع خودش رو صدا میزنه } int main() { callMe(); // شروع اولیه از main return 0; } اگه شرط توقف نذاریم، همینطوری خودش رو صدا میزنه تا حافظه پر بشه و برنامه کرش کنه! پس حتماً باید توی کد، یه شرط بذاریم که تابع متوقف بشه. مثال بازنویسیشده: مجموع اعداد طبیعی با تابع بازگشتی توی این برنامه میخوایم مجموع اعداد طبیعی رو تا عدد واردشده حساب کنیم، ولی با تابعی که خودش خودش رو صدا میزنه: #include <stdio.h> int naturalSum(int num); // نمونه اولیه int main() { int userInput, result; printf("Enter a number greater than zero: "); scanf("%d", &userInput); result = naturalSum(userInput); // فراخوانی تابع بازگشتی printf("Sum = %d", result); return 0; } int naturalSum(int num) { if (num != 0) return num + naturalSum(num - 1); // فراخوانی بازگشتی else return 0; // شرط توقف } خروجی نمونه: Enter a number greater than zero: 4 Sum = 10 اگه عدد 4 وارد کنیم، تابع اول خودش رو با 3 صدا میزنه، بعد با 2، بعد 1، و نهایتاً با 0. وقتی عدد به 0 رسید، شرط else اجرا میشه و تابع دیگه خودش رو صدا نمیزنه. جوابها مرحلهبهمرحله برمیگردن و جمع میشن تا مجموع نهایی حساب شه. مزایا و معایب تابع بازگشتی ✅ کد رو کوتاه و خوانا میکنه ✅ مخصوص الگوریتمهای شکستی و پیمایشی مثل درختها، مرتبسازیها و الگوریتمهای گراف ⚠️ اگه شرط توقف نداشته باشه، باعث حلقه بینهایت و کمبود حافظه میشه ⚠️ نسبت به حلقهها ممکنه کمی کندتر باشه چون حافظه بیشتری مصرف میکنه مثلاً توی الگوریتم Quick Sort یا پیمایش DFS در درختها و گرافها، تابع بازگشتی خیلی کارایی داره و باعث ساختار منظمتر کد میشه. امیدواریم این آموزش براتون مفید بوده باشه! این مقاله توسط سایت علمی رایشمند برای شما آماده شده است.