具有递归的重复算法的排列

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)

但我确信有更好的方法使用递归我只是不知道如何做到这一点.我感谢任何帮助.谢谢.

Ser*_*rvy 5

重复的排列基本上是另一个基数.

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进行计数.


isp*_*iro 5

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)