我正在嘗試編寫一個函數,其中嵌套循環的數量取決於傳遞給它的整數(numStroke)。例如,當numStrokes爲1時,執行的代碼應該是:C#遞歸邏輯
double checkProfitability(GameState state, int numStrokes)
{
double[] possiblePayoffs = new double[50000];
int pPIndex = 0;
double sumOfPayoffs = 0;
double averagePayoff = 0;
for (int i = 0; i <= 5; i++)
{
// Populate possiblePayoffs[]
}
for (int ii = 0; ii < pPIndex; ii++)
{
sumOfPayoffs += possiblePayoffs[i];
}
averagePayoff = sumOfPayoffs/pPIndex;
return averagePayoff;
}
當numStrokes是3時,它應該是:
double checkProfitability(GameState state, int numStrokes)
{
double[] possiblePayoffs = new double[50000];
int pPIndex = 0;
double sumOfPayoffs = 0;
double averagePayoff = 0;
for (int i = 0; i <= 5; i++)
{
state.colors[i]++;
for (int j = 0; j <= 5; j++)
{
state.colors[j]++;
for (int k = 0; k <= 5; k++)
{
// Populate possiblePayoffs[]
}
state.colors[j]--;
}
state.colors[i]--;
}
for (int ii = 0; ii < pPIndex; ii++)
{
sumOfPayoffs += possiblePayoffs[i];
}
averagePayoff = sumOfPayoffs/pPIndex;
return averagePayoff;
}
鏈接是當numStrokes是6的額外實例中,只是在我想要做的情況下,是不是已經很清楚:
http://hastebin.com/hemolikodo.avrasm
到目前爲止,我想出了以下嘗試實現numStrokes amou nt嵌套循環,但它不起作用(如果沒有其他原因,因爲該函數試圖在遞歸調用自身時創建另一個int i副本)。我不確定這個代碼是否是正確的方法。我甚至不確定我應該試圖遞歸地做這件事。我認爲只是使用巨大的if語句來執行基於numStrokes的值的代碼,但更通用的實現似乎更可取。
double checkProfitability(GameState state, int numStrokes, int i)
{
double[] possiblePayoffs = new double[50000];
int pPIndex = 0;
double sumOfPayoffs = 0;
double averagePayoff = 0;
if (numStrokes == 0)
{
// Populate possiblePayoffs[]
}
else
{
for (int i = 0; i <= 5 && numStrokes >= 1; i++)
{
checkProfitability(state, --numStrokes, i);
}
}
for (int ii = 0; ii < pPIndex; ii++)
{
sumOfPayoffs += possiblePayoffs[ii];
}
averagePayoff = sumOfPayoffs/pPIndex;
richTextBox1.Text = averagePayoff.ToString();
return averagePayoff;
}
任何人都可以解釋如何正確實施這個嗎?
編輯:問題是,我不知道我需要多少嵌套循環,直到運行時。
不應該甚至編譯自定義具有相同名稱的兩個變量。 –
您正在修改'state.colors',但是甚至沒有在使用未修改的'pIndex'和'possiblePayoffs'的「return」值中使用它。 – crashmstr
@crashmstr state.colors []用於將值分配給possiblePayoffs。我用註釋替換了算法// Populate possiblePayoffs [],因爲代碼很長。 – user10478