تالار گفتمان مانشت
زیر برنامه های بازگشتی سال ۸۲ و ۸۰ - نسخه‌ی قابل چاپ

زیر برنامه های بازگشتی سال ۸۲ و ۸۰ - m@hboobe - 10 مهر ۱۳۹۱ ۱۱:۵۱ ب.ظ

اصلا متوجه نمیشم این دو سوال به چه صورت حل شده؟؟!!Huh ممنون میشم کمکم کنید

بعد از حل تستها متوجه شدم تکه برنامه هایی که بعد از فراخوانی خود تابع باز دستور هست مقداری مشکل دارم!!!

جواب هر دو تست گزینه ۴ هست.

RE: زیر برنامه های بازگشتی سال ۸۲ و ۸۰ - ahp89 - 11 مهر ۱۳۹۱ ۱۲:۵۶ ق.ظ

(۱۰ مهر ۱۳۹۱ ۱۱:۵۱ ب.ظ)m@hboobe نوشته شده توسط:  اصلا متوجه نمیشم این دو سوال به چه صورت حل شده؟؟!!Huh ممنون میشم کمکم کنید

بعد از حل تستها متوجه شدم تکه برنامه هایی که بعد از فراخوانی خود تابع باز دستور هست مقداری مشکل دارم!!!

جواب هر دو تست گزینه ۴ هست.

ببین قرار نیس F1و F2 همزمان اجرا شن اول F1 اجرا کن جوابتو بگیر و بعد F2 رو اجرا کن ببین جواب چی میشه که من مراحل اجرایه F1 رو میگم
-F1 با ورودی ۴ اجرامیشه
-F2 با ورودی ۳ صدا زده میشه و همزمان printf 4 در پشته قرار میگیره
-F2 عبارت printf y+1 که برابر ۴ میشود را چاپ می کند پس تا الان ما فقط عدد چهار رو چاپ کردیم.
-F2 تابع F1 را با ورودی ۲ صدا میزند .
-F1 با ورودی ۱ تا بع f2 را صدا میزند و همزمان printf 2 را در پشته ذخیره میکند .
-تابع F2 عدد ۲ را چاپ میکند .(پس تا اینجا ۴۲چاپ شده) و تابع F1 با ورودی ۰ صدا زده میشود.
-F1 با وردی ۰ دیگر F2 را صدا نمیزند و print 0 اجرا میشود و خروجی تا اینجا ۴۲۰ است
-در پایان پشته هم خالی میشود که نتیجه ۴۲۰۲۴خواهد شد.

سواله بعدیتون هم هینطور حل میشه.

زیر برنامه های بازگشتی سال ۸۲ و ۸۰ - sahar2 - 14 مهر ۱۳۹۱ ۰۴:۴۳ ق.ظ

من یه سوال دارم، چرا قبل از اینکه به سراغ ّF2 بریم مقدار printf 4 رو در پشته ذخیره میکنیم؟؟ چون اگه به F2 بریم و برگردیم مقدار آن تغییر خواهد کرد?

زیر برنامه های بازگشتی سال ۸۲ و ۸۰ - mfXpert - 14 مهر ۱۳۹۱ ۰۱:۰۴ ب.ظ

(۱۴ مهر ۱۳۹۱ ۰۴:۴۳ ق.ظ)sahar2 نوشته شده توسط:  من یه سوال دارم، چرا قبل از اینکه به سراغ ّF2 بریم مقدار printf 4 رو در پشته ذخیره میکنیم؟؟ چون اگه به F2 بریم و برگردیم مقدار آن تغییر خواهد کرد?
دستوری در پشته ذخیره نمیشه. این آدرس دستور printf x هست که در پشته ذخیره میشه تا بعد از بازگشت از زیربرنامه F1 بدونیم که از کجا باید ادامه کار بدیم. با توجه به اینکه مقدار x به صورت "پارامتر با مقدار" به زیربرنامه F1 فرستاده میشه پس مقدار x قبل از فراخوانی F1 با مقدار x بعد از فراخوانی F1 هیچ تفاوتی نداره. در اینجا مقدار x قبل از فراخوانی F1 برابر با ۴ هستش و بعد از فراخوانی هم همون ۴ باقی خواهد موند.

زیر برنامه های بازگشتی سال ۸۲ و ۸۰ - csharpisatechnology - 15 آبان ۱۳۹۱ ۰۲:۰۸ ق.ظ

ببینید وقتی( F2(x رو با مقدار ۱-۴ یعنی ۳ فراخوانی میکنیم اگر توش داشته باشیم
(F1(X-1
(print(x
==
مقدار ۳ برای خط (print(x به صورت ("print("3 توی پشته ذخیره میشه و اول F1 با( F1(3-2 فراخوانی میشه و کاراشو انجام میده وقتی کارش تمام شد،این print_3 از پشته ورداشته میشه و ادامه ی عملیات رو کامپایلر یا مفسر انجام میده
==
پس اگه تا آخر برنامه برید برای تست اول،گزینه ی ۴ درست هست
=================
در تست دوم هم ابتدا مقدار ۱ ریترن میشه و میره توی r بعدش این ۱ باعث میشه مقدار ۵ ریترن بشه بریزه توی r و در نهایت ۵*۵ = ۲۵ و سپس ۲۵ * ۵ = ۱۲۵ برگشت داده میشه
پس اینجا هم گزینه ی ۴ درست هست.