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

تریس کردن روابط بازگشتی - justlearnnew - 15 مرداد ۱۳۹۲ ۰۹:۵۵ ب.ظ

در بحث فراخوانی های بازگشتی عممولا من و برخی از دانشجویان هنگام بر خورد با برخی از روابط بازگشتی که در وسط برنامه اصلی فراخوای می شوند دچار مشکل می شویم از کسانی که قبلا با این مشکل برخورد داشته و به نتیجه رسیده اند تقاضا دارم برای مثال الگوریتم پیمایش میان وندی را تریس کرده و چگونگی خالی و پر شدن پشته را توضیح دهند .

تریس کردن روابط بازگشتی - azad_ahmadi - 16 مرداد ۱۳۹۲ ۰۳:۴۴ ق.ظ

سلام.
بهتر بود الگوریتم رو مینوشتین یا عکسی ازش می گرفتین، اینطور بهتر میشد توضیحش داد.(عکس کد مثالتون رو بذارید تا از روی اون توضیح بدم براتون).
ببینید، فراخوانی بازگشتی بحث پیچیده ای نیست. مثلا بعضی وقت ها در سوال گراف یا درختی رو میدن و اشاره گر به گرهی اشاره میکنه و هدف از سوال مقدار متغییر یا یه همچین چیزی هست. برای این سوالات باید از نقطه ابتدایی کد شروع کنیم به تریس کردن، در اینحالت ۲ نوع کد وجود داره، فراخوانی بازگشتی در آخرین خط کدنویسی وجود داره، یا اینکه در هرخطی بجز اخرین دستور قرار گرفته.
اگر آخرین دستور کدنویسی فراخوانی بازگشتی باشه مقداری کار راحت تر هست، چرا که هربار فقط با مقادیر جدید و یک خانه از پشته روبرو هستیم. و هربار به ازای فراخوانی یک مقدار رو در پشته قرار میدیم.
اگر نوع دوم باشه، یعنی دستور آخر غیر از فراخوانی باشه، باید دستورات بعد از فراخوانی بازگشتی رو "عینا" بعد از فراخوانی با مقادیر جاری در پشته ذخیره کنیم، مثلا کد زیر رو ببینید:
x(a,b
d= d+1
f++
بعد از فراخوانی تابع x دو دستور بعدی رو باید به پشته انتقال داد. تا بعدا که آخرین فراخوانی هم انجام بشه و پشته رو از بالا بیایم خالی کنیم.
هر کدی رو قرار بدید از روی شکل توضیحش ساده تر خواهد بود. Smile
موفق باشید.