Составить список всех фраз из имеющихся слов в файле - C#
Формулировка задачи:
Всем доброго времени суток! В общем, у меня имеется программа, реализованная через рекурсию, которая составляет список всех фраз из имеющихся слов в файле. Причем так, чтобы эти фразы были анаграммой изначально данной фразы. Хотелось бы вывести все полученные словосочетания в текстовый файл. Но вот в чем заключается проблема: программа напрочь отказывается выполняться дальше этого момента: "AddWord(result)". То есть, когда она доходит до этого момента, ничего не происходит (ну или я не понимаю, что происходит). Она продолжает выполняться и выполняться. Она не доходит до конца, и текстовый файл не создается. Никакой ошибки компилятор не выдает. Исключений тоже нет никаких. Не могу никак понять, что я не так делаю. Буду премного благодарен за любую помощь.
А вот вызов этой функции в мэйне
public static string[] words = File.ReadAllLines(@"J:\AllFWordsV1.txt");
public static List<string> Phrases = new List<string>();
public static int letcount;
public static void AddWord(string word)
{
if (word.Length > 20)
return;
char[] A = "poultry outwits ants".ToCharArray();
A = A.Where(item => item != ' ').ToArray();
words = words.Where(item => item != " ").ToArray();
int n = A.GetLength(0);
char[] B = new char[n];
foreach (var item in words)
{
if (item != " ")
{
string result = word + item;
letcount = 0;
for (int h = 0; h < n; h++)
{
B[h] = A[h];
}
foreach (char letter in result)
{
for (int i = 0; i < n; i++)
{
if (B[i] == letter)
{
B[i] = ' ';
letcount++;
break;
}
}
}
if ((result.Length < 20) && (result.Length == letcount))
{
Phrases.Add(result);
AddWord(result);
}
}
else break;
}
}
foreach (var word in words)
{
AddWord(word);
}
File.WriteAllLines(@"J:\AllPhrasesV11.txt", Phrases.ToArray());
Console.WriteLine("\a\aAll Done"); //Оповещение об окончании работы программыРешение задачи: «Составить список всех фраз из имеющихся слов в файле»
textual
Листинг программы
class Program
{
static void Main(string[] args)
{
List<string> list = new List<string>();
string[] words = File.ReadAllLines(@"J:\AllFWordsV1.txt");
string per = "";
for (int i = 0; i < words.Length; i++)
{
per += i.ToString();
}
foreach (var s in GetPermutations(per).ToArray())
{
string temp = String.Empty;
foreach (char i in s)
temp += words[Convert.ToInt32(i.ToString())] + ' ';
list.Add(temp);
}
File.WriteAllLines(@"J:\AllPhrasesV11.txt", list);
Console.ReadKey();
}
public static IEnumerable<string> GetPermutations(string s)
{
if (s.Length > 1)
return from ch in s from permutation in GetPermutations(s.Remove(s.IndexOf(ch), 1))
select string.Format("{0}{1}", ch, permutation);
else
return new string[] { s };
}
}