PDA

View Full Version : سوال: خروج از زیر برنامه بازگشتی



morteza_bn
جمعه 02 مهر 1389, 11:47 صبح
سلام دوستان برنامه زیر یک الگوریتم عقبگرد هست و می خواد رنگ آمیزی گراف رو روی یک گراف انجام بده
حالا من می خوام وقتی تمام گره های گراف رنگ شد از زیر برنامه بپره بیرون و اجرای اون خاتمه پیدا کنه(یه جوری استک خالی بشه)
لطفا راهنمایی کنید
این کد برنامه




bool IsAdjacentAndColored(int i)
{
int j = 1;
condition = true;
while ( j <i && condition)
{
if (graph[i, j] == 1 && vcolor[i] == vcolor[j])
condition = false;
j++;
}
return condition;
}
void OptimalLight(int i)
{
int color;
if (IsAdjacentAndColored(i))
if (i == count)
{
//end function

}
else
{
for (color = 1; color <= colornumber; color++)
{
vcolor[i + 1] = color;
OptimalLight(i + 1);
}
}
}

sh4mid
جمعه 02 مهر 1389, 12:07 عصر
سلام


if (i == count)
{
return ;//end function
}

morteza_bn
جمعه 02 مهر 1389, 12:19 عصر
سلام


if (i == count)
{
return ;//end function
}


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

sh4mid
جمعه 02 مهر 1389, 17:14 عصر
مدیریت Stack با compiler هستش ، نمیشه دستی stack رو خالی کرد(لااقل تو C#‎)البته شاید هم من بلد نباشم اگه تعداد فراخوانی های برنامت زیاده باید برنامه رو به سبک غیر بازگشتی بنویسی

morteza_bn
شنبه 03 مهر 1389, 14:16 عصر
دوستان چیکار کنم
کسی تا حالا رنگ آمیزی گراف پیاده سازی نکرده..
من به یک سطحی از درخت که میرسم دیگه نیاز نیست بازگشت رو انجام بدم باید از زیر برنامه بپرم بیرون یعنی سی شارپ دستور خروج از زیر برنامه نداره؟
یکی کمک کنه...اگه مشکل حل نشه باید کل الگوریتم رو عوض کنم
لطفا کمک کنید

morteza_bn
شنبه 03 مهر 1389, 19:47 عصر
راه حل نداره؟:ناراحت::ناراحت::نارا ت::افسرده:

cardano7
شنبه 03 مهر 1389, 19:51 عصر
سلام
اگر برنامه اصولی نوشته بشه نیاز به این جور روش ها نیست. همون روش های خاکی هم جواب میده. این جور کارها به فرض اینکه شدنی هم باشند، خوانایی برنامه را کاهش میدند.

debugger
شنبه 03 مهر 1389, 21:28 عصر
اگر return جواب کارت را نمیده :

روش اول با دستور Goto هر جا خواستی می تونی پرش کنی (البته داخل یک بلوک)

روش دوم :یه متغیر bool از نوع static تعریف کن و هر وقت عملیات تمام شد اونجا متغیر بولین را false کن و در اول تمام تابع هایی که نوشتی اون bool را چک کن اگر دیدی مثلا false دیگه برنامه وارد هیچ تابعی نمیشه

نمی دونم چقدر تونستم راهنمایی کنم