我正在创建一个预测应用程序,它将运行生产工厂能够运行的各种"模式"的模拟.工厂可以每天以一种模式运行,因此我正在编写一个功能,将每天选择的不同模式相加,以最大限度地提高工厂的产量,并最好地与所提供的销售预测数量保持一致.此数据将加载到模式对象数组中,然后用于计算工厂的预测输出.
我已经创建了执行此操作的函数,但是,我需要使它们递归,以便我能够处理任何数量(在合理范围内)的模式和工作日(根据生产需要而变化).下面列出的是我的代码,使用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)
感谢所有已经提供输入的人.
调用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)