تالار گفتمان مانشت
(کمک در حل تست) تابع بازگشتی مربوط به برج هانوی - نسخه‌ی قابل چاپ

(کمک در حل تست) تابع بازگشتی مربوط به برج هانوی - samaneh_aftab - 04 تیر ۱۳۹۱ ۰۸:۵۰ ق.ظ

سلام دوستان.
میشه برای من stack این سوال و نحوه فراخوانی توابع بازگشتیش را توضیح بدین؟ این سوال مربوط به توابع بازگشتی برای برج هانوی است

ممنون

RE: (کمک در حل تست) تابع بازگشتی مربوط به برج هانوی - شیوا۸۸ - ۰۵ تیر ۱۳۹۱ ۰۱:۱۶ ق.ظ

(۰۴ تیر ۱۳۹۱ ۰۸:۵۰ ق.ظ)samaneh_aftab نوشته شده توسط:  سلام دوستان.
میشه برای من stack این سوال و نحوه فراخوانی توابع بازگشتیش را توضیح بدین؟ این سوال مربوط به توابع بازگشتی برای برج هانوی است

ممنون

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

(کمک در حل تست) تابع بازگشتی مربوط به برج هانوی - samaneh_aftab - 05 تیر ۱۳۹۱ ۰۸:۰۹ ق.ظ

(۰۵ تیر ۱۳۹۱ ۰۱:۱۶ ق.ظ)شیوا۸۸ نوشته شده توسط:  
(04 تیر ۱۳۹۱ ۰۸:۵۰ ق.ظ)samaneh_aftab نوشته شده توسط:  سلام دوستان.
میشه برای من stack این سوال و نحوه فراخوانی توابع بازگشتیش را توضیح بدین؟ این سوال مربوط به توابع بازگشتی برای برج هانوی است

ممنون

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

میشه رو ۱ کاغذ مراحل حلتون را بنویسید بعد عکسشو برام بذارید؟
منم میدونم که باید بازگشت ها رو به صورت درختی بنویسم ولی این گزینه ۳ درنمیاد. مشکل من نحوه پرشدن استکه

(کمک در حل تست) تابع بازگشتی مربوط به برج هانوی - mfXpert - 05 تیر ۱۳۹۱ ۱۱:۱۸ ق.ظ

شما برا حل این سوال کلا استک رو بزایدر کنار. شما کافیه مفهوم استک تو ذهنت باشه نه اینکه استک رو واقعا رو کاغد بکشید.

RE: (کمک در حل تست) تابع بازگشتی مربوط به برج هانوی - Parva - 05 تیر ۱۳۹۱ ۰۱:۰۴ ب.ظ

خوب من الگوریتم رو براتون تحلیل میکنم، تابع این دستور رو فراخوانی می کنه
[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] چاپ صورت میگیره.