我正在创建一个预测应用程序,该程序将运行生产工厂能够运行的各种“模式”的模拟。该工厂每天可以运行一种模式,因此我正在编写一个功能,将每日选择的不同模式相加,最大限度地提高工厂的产量,并与所提供的销售预测数字保持最佳匹配。这些数据将被加载到一个模式对象的数组中,然后用于计算工厂的预测输出。帮助创建递归函数C#
我已经创建了这个功能,但是,我需要使它们递归,以便能够处理模式和工作日(根据生产需要而变化)的任何数量(合理范围内)。下面列出的是我使用for循环来模拟我想要做什么的代码。有人能指出我正确的方向,以创建一个递归函数来取代多个for循环的需要吗?
其中GetNumbers4方法将有四种模式,而GetNumbers5将有5种模式。诠释开始将是工作日的数量。
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);
}
感谢大家谁已经提供了输入。
你永远不需要*递归函数。任何你可以递归地做的事情都可以迭代地完成,有些问题只适用于递归,就像遍历一个文件系统一样。 – 2009-08-21 20:06:46
为什么不算1做任何事情? – Jimmy 2009-08-21 20:10:54
Count1用于将最内循环的结果传递给循环外的console.writeline。 – 2009-08-21 20:19:37