帮助创建递归函数C#

Irw*_*her 1 c# recursion

我正在创建一个预测应用程序,它将运行生产工厂能够运行的各种"模式"的模拟.工厂可以每天以一种模式运行,因此我正在编写一个功能,将每天选择的不同模式相加,以最大限度地提高工厂的产量,并最好地与所提供的销售预测数量保持一致.此数据将加载到模式对象数组中,然后用于计算工厂的预测输出.

我已经创建了执行此操作的函数,但是,我需要使它们递归,以便我能够处理任何数量(在合理范围内)的模式和工作日(根据生产需要而变化).下面列出的是我的代码,使用for循环来模拟我想要做的事情.有人能指出我正确的方向,以创建一个递归函数来取代多个for循环的需要吗?

方法GetNumbers4将在有四种模式时,GetNumbers5将是5种模式.Int start将是工作日数.

  private static void GetNumber4(int start)
    {
        int count = 0;
        int count1 = 0;          

        for (int i = 0; 0 <= start; i++)
        {
            for (int j = 0; j <= i; j++)
            {

                for (int k = 0; k <= j; k++)
                {
                    count++;

                     for (int l = 0; l <= i; l++)
                     {
                         count1 = l;
                     }

                     Console.WriteLine(start + " " + (count1 - j) + " " + (j - k) + " " + k);
                     count1 = 0;
                }  

            }
            start--;

        }
        Console.WriteLine(count);

    }

    private static void GetNumber5(int start)
    {
        int count = 0;
        int count1 = 0;

        for (int i = 0; 0 <= start; i++)
        {
            for (int j = 0; j <= i; j++)
            {

                for (int k = 0; k <= j; k++)
                {

                    for (int l = 0; l <= k; l++)
                    {
                        count++;
                        for (int m = 0; m <= i; m++)
                        {
                            count1 = m;
                        }
                        Console.WriteLine(start + " " + (count1 - j) + " " + (j - k) + " " + (k - l) + " " + l);
                        count1 = 0;
                    }

                }

            }
            start--;

        }
        Console.WriteLine(count);

    }
Run Code Online (Sandbox Code Playgroud)

编辑:

我认为如果我举一个例子说明我想做什么会更有帮助.例如,如果工厂可以以"A","B","C"三种模式运行并且有三个工作日,则代码将返回以下结果.

3  0  0
2  1  0
2  0  0
1  2  0
1  1  1
1  0  2
0  3  0
0  2  1
0  1  2
0  0  3
Run Code Online (Sandbox Code Playgroud)

这一系列数字代表AB C的三种模式.我将这些结果加载到具有相应生产率的Modes对象中.这样做可以让我快捷创建每个可能组合的列表; 相反,它给了我一个发生的频率.

基于已经提供的解决方案之一,我想做这样的事情.

    //Where Modes is a custom classs
    private static Modes GetNumberRecur(int start, int numberOfModes)
    {
        if (start < 0)
        {
            return Modes;

        }

        //Do work here
        GetNumberRecur(start - 1);
    }
Run Code Online (Sandbox Code Playgroud)

感谢所有已经提供输入的人.

Jim*_*mmy 6

调用GetNumber(5,x)应该产生与GetNumber5(x)相同的结果:

static void GetNumber(int num, int max) {
    Console.WriteLine(GetNumber(num, max, ""));
}
static int GetNumber(int num, int max, string prefix) {
    if (num < 2) {
        Console.WriteLine(prefix + max);
        return 1;
    }
    else {
        int count = 0;
        for (int i = max; i >= 0; i--)
            count += GetNumber(num - 1, max - i, prefix + i + " ");
        return count;
    }
}
Run Code Online (Sandbox Code Playgroud)