Ich erstelle eine Prognoseanwendung, die Simulationen für verschiedene "Modi" ausführt, die eine Produktionsanlage ausführen kann. Die Anlage kann in einem Modus pro Tag betrieben werden, deshalb schreibe ich eine Funktion, die die verschiedenen Modi addiert, die jeden Tag ausgewählt werden, um die Leistung der Anlage am besten zu maximieren und sich am besten mit den angegebenen Umsatzvorhersagenummern auszurichten. Diese Daten werden in ein Array von Modusobjekten geladen, die dann zur Berechnung der prognostizierten Ausgabe der Anlage verwendet werden.Hilfe beim Erstellen einer rekursiven Funktion C#
Ich habe die Funktionen erstellt, um dies zu tun, jedoch muss ich sie rekursiv machen, so dass ich in der Lage bin, mit einer beliebigen Anzahl (innerhalb des Grundes) von Modi und Arbeitstagen (die je nach Produktionsanforderungen variiert). Im Folgenden finden Sie meinen Code, der for-Schleifen verwendet, um zu simulieren, was ich tun möchte. Kann mir jemand in die richtige Richtung zeigen, um eine rekursive Funktion zu erstellen, die die Notwendigkeit mehrerer For-Schleifen ersetzt?
Wo die Methode GetNumbers4 wäre, wenn es vier Modi gäbe, und GetNumbers5 wären 5 Modi. Int Start wäre die Anzahl der Arbeitstage.
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);
}
EDITED:
Ich denke, dass es hilfreich wäre, wenn ich ein Beispiel gegeben, was ich versuche zu tun. Wenn beispielsweise eine Anlage in drei Modi "A", "B", "C" ausgeführt werden kann und es drei Arbeitstage gibt, gibt der Code die folgenden Ergebnisse zurück.
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
Die Reihe von Zahlen stellen die drei Modi A B C I diese Ergebnisse in einem Modes Objekt laden wird, die die entsprechenden Produktionsraten aufweist. Auf diese Weise kann ich eine Liste aller möglichen Kombinationen erstellen. es gibt mir stattdessen eine Häufigkeit des Auftretens.
Aufbauend auf einer der bereits angebotenen Lösungen würde ich gerne so etwas tun.
//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);
}
Vielen Dank an alle, die bereits zur Verfügung gestellt haben.
Sie brauchen * nie * eine rekursive Funktion. Alles, was Sie rekursiv tun können, kann iterativ durchgeführt werden, einige Probleme eignen sich nur für die Rekursion, wie das Durchlaufen eines Dateisystems. –
Warum zählt nicht1 irgendetwas? – Jimmy
Count1 wird verwendet, um die Ergebnisse von der innersten for-Schleife an die console.writeline außerhalb der Schleife zu übergeben. –