我正在創建一個預測應用程序,該程序將運行生產工廠能夠運行的各種「模式」的模擬。該工廠每天可以運行一種模式,因此我正在編寫一個功能,將每日選擇的不同模式相加,最大限度地提高工廠的產量,並與所提供的銷售預測數字保持最佳匹配。這些數據將被加載到一個模式對象的數組中,然後用於計算工廠的預測輸出。幫助創建遞歸函數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