C# 如何将这个递归函数转换为迭代函数

C# 如何将这个递归函数转换为迭代函数,c#,recursion,iteration,combinations,C#,Recursion,Iteration,Combinations,我想用迭代版本替换这个函数。 我发现一些版本接受唯一的输入 private static void FindCombinations(char[] A, string output, ref int counter, int i, int n, int k) { //Console.WriteLine($"i:{i} n:{n} k:{k} r:{output}"); if (k == 0) { Console.WriteLine(ou

我想用迭代版本替换这个函数。 我发现一些版本接受唯一的输入

private static void FindCombinations(char[] A, string output, ref int counter, int i, int n, int k)
{
    //Console.WriteLine($"i:{i} n:{n} k:{k} r:{output}");
    if (k == 0)
    {
        Console.WriteLine(output);
        counter++;
        return;
    }

    for (int j = i; j < n; j++)
    {
        FindCombinations(A, output + " " + A[j].ToString(), ref counter, j + 1, n, k - 1);
        while (j < n - 1 && A[j] == A[j + 1])
            j++;
    }
}
private static void Main(string[] args)
{
    string output = "";
    char[] keys = new char[] { 'A', 'A', 'B', 'C', 'D' };
    int count = 0;
    FindCombinations(keys, output, ref count, 0, keys.Length, 3);
    Console.WriteLine(count.ToString());
    Console.ReadKey();
}
私有静态void find组合(char[]A,字符串输出,ref int计数器,int i,int n,int k)
{
//WriteLine($“i:{i}n:{n}k:{k}r:{output}”);
如果(k==0)
{
控制台写入线(输出);
计数器++;
返回;
}
对于(int j=i;j
下一次,您必须首先提供您的代码尝试,因为这个社区不是为您编程,而是试图帮助您编程。此外,如果能提供更多的背景,我们将不胜感激

无论如何,我认为下面的方法应该适合你。检查它是否适用于许多不同的情况,特别是边界条件。当然,这段代码是可以优化的(我只是试图模仿递归方法的功能),但由于您只是要求使用非递归代码,它应该足够了:

private static void FindCombinations2(char[]A,字符串输出,ref int计数器,int i,int n,int k)
{
i=数学最大值(i,0);
n=数学最小值(A.长度,n);
char[]A_used=新字符[n-i];
复制(A,i,A_,0,n-i);
int[]indexVect=新的int[k];
对于(int j=0;j=L)
{
indexVect[movingIndex]=移动索引;
移动索引--;
如果(移动索引<0)
打破
currentBase=currentBase.Substring(0,currentBase.Length-2);
继续;
}
char nextA=A_使用[indexA];
currentBase+=“”+nextA;
int t;
对于(t=indexVect[movingdex]+1;t=L)
indexVect[movingIndex]=L;
movingIndex++;
如果(移动索引>=k)
{
控制台写入线(currentBase);
计数器++;
移动索引--;
currentBase=currentBase.Substring(0,currentBase.Length-2);
}
其他的
indexVect[movingIndex]=数学最大值(indexVect[movingIndex],indexA+1);
}
}

您能告诉我们到目前为止您都做了哪些尝试吗?另外,如果你能用文字解释这个方法应该做什么,那也会有帮助。这个算法来自,我刚刚激活了一个选项,其中输入有重复值great,尽管最好是用你自己的文字。请回答您的问题,并将信息放在那里,而不是链接(一个好的问题应该解释问题本身)。请加上你所做的尝试。我的意图是不伤害任何人!谢谢你的回答