Я создаю приложение для прогнозирования, которое будет запускать симуляции для различных «режимов», которые может запустить производственное предприятие. Завод может работать в одном режиме в день, поэтому я пишу функцию, которая будет складывать различные режимы, выбранные каждый день, которые наилучшим образом максимизируют производительность завода и лучше всего соответствуют предоставленным прогнозам продаж. Эти данные будут загружены в массив объектов режима, которые затем будут использоваться для расчета прогнозируемой производительности завода.
Я создал функции, чтобы сделать это, однако мне нужно сделать их рекурсивными, чтобы я мог обрабатывать любое количество (в пределах разумного) режимов и рабочих дней (которые зависят от потребностей производства). Ниже приведен мой код, использующий циклы 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. Я загружу эти результаты в объект 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);
}
Спасибо всем, кто уже предоставил информацию.