Este es mi código:método de recursión en C#
static int cardGameValue(List<int> D, int myScore, int opponentScore)
{
if (D.Count == 0) return myScore;
else if (D.Count == 1)
{
opponentScore += D[0];
return myScore;
}
else
{
if (D[0] <= D[D.Count - 1])
{
opponentScore += D[D.Count - 1];
D.RemoveAt(D.Count - 1);
}
else
{
opponentScore += D[0];
D.RemoveAt(0);
}
int left = cardGameValue(new List<int>(D.GetRange(1, D.Count - 1)), myScore + D[0], opponentScore);
int right = cardGameValue(new List<int>(D.GetRange(0, D.Count - 1)), myScore + D[D.Count - 1], opponentScore);
if (left >= right)
{
return left;
}
else
{
return right;
}
}
}
}
Mi código toma un conjunto de cartas y representa su puntuación máxima posible cuando se juega contra un oponente determinista. Después de cada jugada de tu oponente tienes 2 opciones hasta que todas las cartas sean elegidas. ¿Hay alguna manera de almacenar de alguna manera mis resultados de las iteraciones para poder mejorar mi algoritmo? Entonces, ¿la recursión no hace iteraciones innecesarias? Porque después de 40 o 50 cartas, se vuelve muy lento.
podar el árbol .... –
Pero no tengo un árbol en sí, es solo un proceso de recursión. ¿Hay alguna manera de podarlo mientras lo ejecuta? –