Я разрабатываю приложение, которое использует рекурсию.Как я могу избежать рекурсии?
void Keres(char[,] array, int width, int height)
{
_found = Search(array, height, width, _words);
if (_found.Count < 6)
{
_found.Clear();
Keres(array, width, height);
}
}
Поиск является рекурсивным методом и возвращает строковый список. И мне нужно, чтобы количество было больше 5. Но если это не так, мне нужно снова и снова вызвать метод Keres, пока он не будет равен 6 или больше, но мое приложение замерзает.
Вот где я вызываю метод Керес:
if ((string)appSettings["gamelanguage"] == "english")
{
szo = EngInput(3, 3); //szo is a char[,] array
Keres(szo, 3, 3);
}
Что я могу сделать, чтобы избежать рекурсии или избежать аварии, и получить мои> 6 пунктов?
Edit: Метод поиска
List<string> Search(char[,] letter_table, int height, int width, List<string> words_list)
{
List<string> possible_words = new List<string>();
char[,] _tmp_letter_table = _tmp_letter_table = new char[height, width];
bool possible = false;
foreach (String word in words_list)
{
possible = false;
Array.Copy(letter_table, _tmp_letter_table, width * height);
for (int i = 0; i < height; i++)
{
for (int j = 0; j < width; j++)
{
if (_tmp_letter_table[i, j] == word[0])
{
if (IsNeighborTest(word, i, j, height, width, _tmp_letter_table, 0) == true)
{
possible = true;
break;
}
else
{
Array.Copy(letter_table, _tmp_letter_table, width * height);
}
}
}
if (possible == true)
{
possible_words.Add(word);
break;
}
}
}
return possible_words;
}
Так в чем проблема? Объявление или рекурсия? Я имею в виду: вы уверены, что рекурсия является основной причиной? –
BTW, в вашем методе 'Keres' вы вызываете' Поиск' с теми же параметрами снова и снова. Вероятно, из-за этого ваше приложение выходит из строя с помощью StackOverflowException. Если так - тогда избавиться от рекурсии это исправит. .. и вы получите outofmemoryexception или приложение будет висеть. Если в методе поиска вы вызываете некоторый Thread.Sleep или что-то еще, чтобы ждать и надеяться на что-то, это может заставить метод 'Search' возвращать другой результат. –
. Отправьте код для' Search() '. Кроме того, является 'Search' рекурсивным методом? Из того, что я вижу, «Keres» также рекурсивный. – PoweredByOrange