50٪ تخفیف روی تمام دوره‌ها!
پایان تخفیف تا:
مشاهده دوره‌ها
0

راهنمایی درمورد نحوه‌ی کار قطعه کد تابع بازگشتی

درود

من تازه دارم با توابع بازگشتی آشنا میشم، یه قطعه کد دارم (++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);

هر چی روش فکر کردم متوجه نشدم دقیقا داره چه کاری انجام میده، ممکنه راهنماییم کنید و بگید دقیقا منطق این قسمت چیه و داره چه جوری کار میکنه؟

پیشاپیش سپاس بابت راهنماییتون

پرسیده شده در 1394/12/05 توسط

3 پاسخ

0

دستور return به معنای پایان است زیرا تابع int main از نوع عدد صحیح است و عدد صحیح بر می گرداند ولی اگر جای int از void استفاده شود دیگر نیازی به دستور return نیست

پاسخ در 1394/12/20 توسط
1

دقت کنید return دوتا کار انجام میده:

برگردادن مقدار و خروج از ساب روتین یا روتین!

برگرداندن مقدار توسط تابع Return اپشنال هست و میتونه هیچ مقداری رو بر نگردونه! در c++ اگه تابع رو از نوع خاصی تعریف کنید باید مقداری رو از همون نوع توسط return برگردونید وگرنه خطا میده.

پاسخ در 1394/12/22 توسط
1

خیلی راحته! هردفعه اون قطعه کد اجرا میشه یه کاراکتر از اول متن برمیداره و میزاره اخر متن بعدش دوباره تابع رو صدا میزنه مثلا به صورت زیر اگه من کلمه ی 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 به همین خوشکلی

پاسخ در 1394/12/05 توسط

پاسخ شما