PDA

View Full Version : مشکل با تابع بازگشتی و لیست



Saman_12
سه شنبه 10 تیر 1393, 06:27 صبح
سلام.
میخوام تمام حالات چیدن چند تا حرف کنار هم رو داشته باشم و تکرارم مجازه :

private List<string> GetPossiblePass(List<string> datalist, Int32 count)
{

List<string> passlist = new List<string>();
List<string> newpasslist = new List<string>();

_getpossiblepass(datalist, count, ref passlist);


foreach (object item_loopVariable in passlist) {
item = item_loopVariable;
if (item.Length == count && !newpasslist.Contains(item))
newpasslist.Add(item);
}

return (newpasslist);
}


private void _getpossiblepass(List<string> datalist, Int32 count, ref List<string> passlist)
{

if (passlist.Count == 0) {

foreach (object ichar_loopVariable in datalist) {
ichar = ichar_loopVariable;
passlist.Add(ichar);
_getpossiblepass(datalist, count, ref passlist);
}

} else {
string newdata = null;

foreach (object ichar_loopVariable in datalist) {
ichar = ichar_loopVariable;

for (Int32 i = 0; i <= passlist.Count - 1; i++) {
newdata = passlist[i] + ichar;


if (newdata.Length <= count) {
passlist.Add(newdata);
if (newdata.Length < count)
_getpossiblepass(datalist, count, ref passlist);
}
}
}
}
}


List<string> charlist = new List<string>();

charlist.AddRange({
"a",
"b"
});

List<string> passlist = GetPossiblePass(charlist, 3);


foreach (object item_loopVariable in passlist) {
item = item_loopVariable;
Console.WriteLine(item);
}

ولی کار نمیکنه و خطا میده مثل اینکه برنامه افتاده باشه تو یه حلقه نامتناهی!

Saman_12
سه شنبه 10 تیر 1393, 11:19 صبح
ببینید این برنامه میاد در هربار اجرای تابع در ازای هر عضو لیست یک عضو دیگه میسازه که یک حرف از قبلی بیشتر و این کار رو تا رسیدن به تعداد حروف مشخص تکرار میکنه ودر انتها عضو های با طول مناسب بر میگردن ولی خطا میده :
An unhandled exception of type 'System.StackOverflowException' occurred in Test app.exe

Saman_12
سه شنبه 10 تیر 1393, 13:17 عصر
تابع رو از اول نوشتم به صورت یک پارچه حل شد!
تشکر