Приветствую всех, сегодня мы рассмотрим пример при котором на входе задается длина комбинации, а символы которые будут использоваться в комбинации вносятся в методе MakeSubsets. Давно еще лет 5 назад, когда мне требовалось написать программу для подбора пароля из комбинаций цифр я использовал условные операторы и счетчики. Мой код был ужасен, а длина его была очень большой. Сейчас я покажу как с помощью рекурсии и простого кода вывести все комбинации символов a, b, c, d заданной длины пароля.
public static void Main()
{
WriteAllWordsOfSize(1);
WriteAllWordsOfSize(2);
WriteAllWordsOfSize(3);
WriteAllWordsOfSize(4);
Console.ReadKey();
}
static void WriteAllWordsOfSize(int size)
{
MakeSubsets(new char[size]);
}
static void MakeSubsets(char[] subset, int position = 0)
{
if (position == subset.Length)
{
Console.WriteLine(new string(subset));
return;
}
subset[position] = 'a';
MakeSubsets(subset, position + 1);
subset[position] = 'b';
MakeSubsets(subset, position + 1);
subset[position] = 'c';
MakeSubsets(subset, position + 1);
subset[position] = 'd';
MakeSubsets(subset, position + 1);
}
Расширить количество символов можно добавив строчку кода и по аналогии другие символы вы сможете добавить самостоятельно:
subset[position] = 'f'; MakeSubsets(subset, position + 1);
