Đây là mã của tôi:Cải thiện phương pháp đệ quy trong 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;
}
}
}
}
Mã của tôi phải mất một tập hợp các thẻ và đại diện cho số điểm tối đa có thể của bạn khi thi đấu với một đối thủ xác định. Sau mỗi lượt chơi của đối thủ, bạn có 2 lựa chọn cho đến khi tất cả các lá bài được chọn. Có cách nào để lưu trữ kết quả của tôi về các lần lặp lại để tôi có thể cải thiện thuật toán của mình không? Vì vậy, đệ quy không làm lặp đi lặp lại không cần thiết? Bởi vì sau 40 hoặc 50 thẻ nó trở nên rất chậm.
tỉa cây .... –
Nhưng tôi không có cây, nó chỉ là một quá trình đệ quy. Có cách nào để cắt nó trong khi thực hiện nó? –