تالار گفتمان مانشت

نسخه‌ی کامل: (كمك در حل تست) تابع بازگشتی مربوط به برج هانوی
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
سلام دوستان.
میشه برای من stack این سوال و نحوه فراخوانی توابع بازگشتیش را توضیح بدین؟ این سوال مربوط به توابع بازگشتی برای برج هانوی است

ممنون
(04 تير 1391 08:50 ق.ظ)samaneh_aftab نوشته شده توسط: [ -> ]سلام دوستان.
میشه برای من stack این سوال و نحوه فراخوانی توابع بازگشتیش را توضیح بدین؟ این سوال مربوط به توابع بازگشتی برای برج هانوی است

ممنون

سلام.گزینه 3 صحیح است .باید بازگشت ها رو به صورت درختی بنویسی
(05 تير 1391 01:16 ق.ظ)شیوا88 نوشته شده توسط: [ -> ]
(04 تير 1391 08:50 ق.ظ)samaneh_aftab نوشته شده توسط: [ -> ]سلام دوستان.
میشه برای من stack این سوال و نحوه فراخوانی توابع بازگشتیش را توضیح بدین؟ این سوال مربوط به توابع بازگشتی برای برج هانوی است

ممنون

سلام.گزینه 3 صحیح است .باید بازگشت ها رو به صورت درختی بنویسی

میشه رو 1 کاغذ مراحل حلتون را بنویسید بعد عکسشو برام بذارید؟
منم میدونم که باید بازگشت ها رو به صورت درختی بنویسم ولی این گزینه 3 درنمیاد. مشکل من نحوه پرشدن استکه
شما برا حل این سوال کلا استک رو بزایدر کنار. شما کافیه مفهوم استک تو ذهنت باشه نه اینکه استک رو واقعا رو کاغد بکشید.
خوب من الگوریتم رو براتون تحلیل میکنم، تابع این دستور رو فراخوانی می کنه
[tex]test\left (3,A,B,C \right )[/tex]

مرحله اول:
وقتی وارد برنامه میشه سطر اول شرط برقرار نیست n=1 نیست،
سطر دوم تابع بازگشتی خودش رو فراخوانی می کنه
[tex]test\left (2,A,C,B \right )[/tex]
دستورات زیر این صدا زدن وارد پشته میشه؛ یک نکته خیلی مهم است که باشد در نظر بگیری
"اگر زیر برنامه ای در وسط بدنه دستوراتش، خودش را صدا بزند می بایست تمام دستورات زیر آن صدا زدن را به همان ترتیب درون پشته بفرستید. "

خوب دستورات پشته در مرحله اول از بالا به پایین
[tex]print\left ( i,k \right )\,[/tex] که اینجا با توجه به فراخوانی [tex]test\left (3,A,B,C \right )[/tex] دستور بالای پشته print AC خواهد بود.
[tex]test\left (2,B,A,C \right )[/tex]

مرحله دوم:
اینجا فراخوانی صورت میگیره [tex]test\left (2,A,C,B \right )[/tex]
شرط n=1 برقرار نیست
دستور دوم تابع [tex]test\left (1,A,B,C \right )[/tex] فراخوانی میشود دستورات زیر این صدا زدن وارد پشته می شود
[tex]print\left ( i,k \right )\,[/tex] که اینجا با توجه به فراخوانی [tex]test\left (2,A,C,B \right )[/tex] دستور بالای پشته print AB خواهد بود.
[tex]test\left (1,C,A,B \right )[/tex]
تا این مرحله دستورات پشته از بالا به پایین بصورت زیر هستش
print AB
[tex]test\left (1,C,A,B \right )[/tex]
print AC
[tex]test\left (2,B,A,C \right )[/tex]

مرحله سوم :
اینجا فراخوانی [tex]test\left (1,A,B,C \right )[/tex] صورت میگیره.
شرط اول برقراره n=1 پس اولین چیزی که چاپ میشه [tex]print\left ( i,k \right )\,[/tex] که i=A , k=C , Ac چاپ میشه.
برمیگردیم سراغ پشته اولین دستور print AB که انجام میگیره.

دستور بعدی بالای پشته فراخوانی [tex]test\left (1,C,A,B \right )[/tex] هستش که وارد برنامه میشه دستور اول برقراره و دستور چاپ [tex]print\left ( i,k \right )\,[/tex] بصورت زیر هستش که i=C , k=B که CB چاپ میشه.

دستور سوم پشته print AC هست
تاالان چاپ شده ها: [tex]print\left ( AC,AB,CB,AC \right )[/tex]

مرحله چهارم:
دستور اخر پشته فراخوانی [tex]test\left (2,B,A,C \right )[/tex]هستش که وارد برنامه میشه و پشته خالی میشه
شرط n=1 برقرار نیست فراخوانی [tex]test\left (1,B,C,A \right )[/tex]
و دستوراتی که وارد پشته میشه
[tex]print\left ( i,k \right )\,[/tex] که اینجا با توجه به فراخوانی [tex]test\left (2,B,A,C \right )[/tex] دستور بالای پشته print BC خواهد بود.
[tex]test\left (1,A,B,C \right )[/tex]

مرحله پنجم:
فراخوانی [tex]test\left (1,B,C,A \right )[/tex] که شرط برقراره و دستور چاپ [tex]print\left ( i,k \right )\,[/tex] که BA چاپ میشه
سراغ دستورات پشته میریم print BC و ااخرین دستور [tex]test\left (1,A,B,C \right )[/tex] که برنامه فراخوانی میشه شرط برقرار و
دستور چاپ [tex]print\left ( i,k \right )\,[/tex] که AC چاپ میشه

به این ترتیب [tex]print\left ( AC,AB,CB,ACوBA,BC,AC \right )[/tex] چاپ صورت میگیره.
لینک مرجع