mar*_*s84 1 c# recursion permutation
我在使用一个函数来完成这项工作时遇到了一些麻烦,而不是必须使用很多函数.
如果我想用2 ^ 3的重复进行排列. 重复的排列
要得到:
000
001
101
011
100
101
110
111
Run Code Online (Sandbox Code Playgroud)
我可以有这个功能:
static void Main(string[] args)
{
three_permutations(2);
Console.ReadLine();
}
static void three_permutations(int y)
{
for (int aa = 0; aa < y; aa++)
{
for (int bb = 0; bb < y; bb++)
{
for (int cc = 0; cc < y; cc++)
{
Console.Write((aa));
Console.Write((bb));
Console.Write((cc));
Console.WriteLine();
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是然后做4(就像2 ^ 4),我能想到的唯一方法就是:
static void four_permutations(int y)
{
for (int aa = 0; aa < y; aa++)
{
for (int bb = 0; bb < y; bb++)
{
for (int cc = 0; cc < y; cc++)
{
for (int dd = 0; dd < y; dd++)
{
Console.Write((aa));
Console.Write((bb));
Console.Write((cc));
Console.Write((dd));
Console.WriteLine();
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
但我确信有更好的方法使用递归我只是不知道如何做到这一点.我感谢任何帮助.谢谢.
重复的排列基本上是另一个基数.
public static void Permutations(int digits, int options)
{
double maxNumberDouble = Math.Ceiling(Math.Pow(options, digits));
int maxNumber = (int)maxNumberDouble;
for (int i = 0; i < maxNumber; i++)
{
Console.WriteLine(Convert.ToString(i, options).PadLeft(3, '0'));
}
}
Run Code Online (Sandbox Code Playgroud)
您打印的示例基本上是从基数2中的0到8进行计数.
void permutations(string text, int numberOfDigits, int numberOfChars)
{
if (numberOfDigits > 0)
for (int j = 0; j < numberOfChars; j++)
permutations(text + j.ToString(), numberOfDigits - 1, numberOfChars);
else textBox1.Text += text + "\r\n";
}
Run Code Online (Sandbox Code Playgroud)
并致电:
permutations("", 3, 2);
Run Code Online (Sandbox Code Playgroud)