Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 递归地从数组中获取所有可能的排列_C#_Loops_Recursion - Fatal编程技术网

C# 递归地从数组中获取所有可能的排列

C# 递归地从数组中获取所有可能的排列,c#,loops,recursion,C#,Loops,Recursion,我有一个数字字符数组: static char[] numbers = {'0','1','2','3','4','5','6','7','8','9'}; 我需要做一个函数,将它们组合成所有可能的组合,最多3位数。像这样: 0 1 2 3 00 01 02 03 10 11 12 13 20 21 22 23 30 31 32 33 000 001 002 003 010 011 像那样,但有所有可能的组合。 到目前为止,我已经使用了if-inside的for循环,但是我发现使用递归函数更

我有一个数字字符数组:

static char[] numbers = {'0','1','2','3','4','5','6','7','8','9'};
我需要做一个函数,将它们组合成所有可能的组合,最多3位数。像这样:

0
1
2
3
00
01
02
03
10
11
12
13
20
21
22
23
30
31
32
33
000
001
002
003
010
011
像那样,但有所有可能的组合。 到目前为止,我已经使用了if-inside的for循环,但是我发现使用递归函数更好
做这件事的最佳和最快的方法是什么?

好吧,这就是我想到的代码

    static char[] numbers = {'0','1','2','3','4','5','6','7','8','9'};
    static bool continuar = true;

    private static void Start(int maxLength)
    {
        for (int i = 0; i <= maxLength; i++)
            Permutations(i, 0, "");
    }

    private static void Permutations(int keyLength, int position, string baseString)
    {
        bool print = true;
        if (continuar)
        {
            for (int i = 0; i < numbers .Length; i++)
            {
                string temp = baseString + numbers [i];
                if (position <= keyLength - 1)
                {
                    Permutations(keyLength, position + 1, temp);
                    print = false;
                }
                if (continuar && print)
                    Console.WriteLine(temp);
            }
        }
    }

简短易读还是快速?您可以使用这种快速实现,它也值得一读:对于任务所花费的计算机时间来说,这是最快的,但也是最好的编码方式。除非您想要并行编程,否则最好的办法是按照您自然的方式来做-一个从字符0到9开始的函数,最多可以获得3个从0到9开始的组合,适用于所有角色。但你真的必须通过基准测试来为自己找到真正的答案。