راهنمایی درمورد نحوهی کار قطعه کد تابع بازگشتی
درود
من تازه دارم با توابع بازگشتی آشنا میشم، یه قطعه کد دارم (++C) که یک رشته رو دریافت میکنه و معکوس اونو در خروجی نمایش میده (به کمک تابع بازگشتی) کد کاملش اینه:
#include <iostream> #include <string> #include <conio.h> using namespace std; string reverse (string st); int main() { string st; cin >> st; cout << "Reverse: " << reverse(st) << endl; getch(); return 0; } string reverse(string st) { if (st.length() == 1) return st; else return reverse(st.substr(1,st.length())) + st.at(0); }
تمام قسمتهای کد رو متوجه میشم به جز این قسمت:
return reverse(st.substr(1,st.length())) + st.at(0);
هر چی روش فکر کردم متوجه نشدم دقیقا داره چه کاری انجام میده، ممکنه راهنماییم کنید و بگید دقیقا منطق این قسمت چیه و داره چه جوری کار میکنه؟
پیشاپیش سپاس بابت راهنماییتون
3 پاسخ
دستور return به معنای پایان است زیرا تابع int main از نوع عدد صحیح است و عدد صحیح بر می گرداند ولی اگر جای int از void استفاده شود دیگر نیازی به دستور return نیست
دقت کنید return دوتا کار انجام میده:
برگردادن مقدار و خروج از ساب روتین یا روتین!
برگرداندن مقدار توسط تابع Return اپشنال هست و میتونه هیچ مقداری رو بر نگردونه! در c++ اگه تابع رو از نوع خاصی تعریف کنید باید مقداری رو از همون نوع توسط return برگردونید وگرنه خطا میده.
خیلی راحته! هردفعه اون قطعه کد اجرا میشه یه کاراکتر از اول متن برمیداره و میزاره اخر متن بعدش دوباره تابع رو صدا میزنه مثلا به صورت زیر اگه من کلمه ی mahdi رو بهش بدم :
return reverse(st.substr(1,st.length())) + st.at(0); /* step0: mahdi step1:return ahdi + m step2:return hdi + a step3:return di+h step4: return d+i now join all of fucntion return stacks: step5: return idham */
این کار (برداشتن یک کاراکتر از اول متن و گذاشتنش در اخر متن) انقد ادامه پیدا میکنه تا متن به صورت کامل برعکس بشه! هر وقت که یه کاراکتر از متن اصلی کنده بشه طولش یکی کمتر میشه و یه شرط if نوشتیم که اگه طول اون 1 شد , یعنی اگه در اخر فقط یک کاراکتر موند کار تموم شده :-D به همین خوشکلی