c# - 帮助创建递归函数 C#

标签 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);

    }

已编辑:

我认为,如果我举例说明我正在尝试做的事情会更有帮助。例如,如果工厂可以在“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

这一系列数字代表三种模式 A B C。我会将这些结果加载到具有相应生产率的模式对象中。这样做可以让我快捷地创建一个包含所有可能组合的列表;相反,它给了我出现的频率。

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

    //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);
    }

感谢所有已经提供意见的人。

最佳答案

调用 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;
    }
}

关于c# - 帮助创建递归函数 C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1313969/

相关文章:

c# - 在已经登录的情况下处理登录期间的防伪造错误? ASP.NET MVC

haskell - 下面的函数尾调用优化了吗?

c# - .NET 4 中的 EnumerateFiles 和 EnumerateFileSystemEntries 有什么区别?

c# - 在没有超时的情况下从数据库中提取记录

来自 eloquent javascript 的 javascript 闭包教程

java - Java中二叉树的递归检查

c - 旋转函数,使用 C 中的递归,以数组和整数作为输入

c# - 排列中递归行为不一致

c# - slider 不会与 IsMoveToPointEnabled 行为一起拖动

c# - 尝试查找 TextBox 中包含的值时出现奇怪的 ASP.NET 问题