![]() |
زیر برنامه های بازگشتی سال ۸۲ و ۸۰ - نسخهی قابل چاپ |
زیر برنامه های بازگشتی سال ۸۲ و ۸۰ - m@hboobe - 10 مهر ۱۳۹۱ ۱۱:۵۱ ب.ظ
اصلا متوجه نمیشم این دو سوال به چه صورت حل شده؟؟!! ![]() بعد از حل تستها متوجه شدم تکه برنامه هایی که بعد از فراخوانی خود تابع باز دستور هست مقداری مشکل دارم!!! جواب هر دو تست گزینه ۴ هست. |
RE: زیر برنامه های بازگشتی سال ۸۲ و ۸۰ - ahp89 - 11 مهر ۱۳۹۱ ۱۲:۵۶ ق.ظ
(۱۰ مهر ۱۳۹۱ ۱۱:۵۱ ب.ظ)m@hboobe نوشته شده توسط: اصلا متوجه نمیشم این دو سوال به چه صورت حل شده؟؟!! ببین قرار نیس 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 و در نهایت ۵*۵ = ۲۵ و سپس ۲۵ * ۵ = ۱۲۵ برگشت داده میشه پس اینجا هم گزینه ی ۴ درست هست. |