Приветствую всех, сегодня мы рассмотрим пример при котором на входе задается длина комбинации, а символы которые будут использоваться в комбинации вносятся в методе MakeSubsets. Давно еще лет 5 назад, когда мне требовалось написать программу для подбора пароля из комбинаций цифр я использовал условные операторы и счетчики. Мой код был ужасен, а длина его была очень большой. Сейчас я покажу как с помощью рекурсии и простого кода вывести все комбинации символов a, b, c, d заданной длины пароля.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
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); } |
Расширить количество символов можно добавив строчку кода и по аналогии другие символы вы сможете добавить самостоятельно:
1 2 |
subset[position] = 'f'; MakeSubsets(subset, position + 1); |