我的问题:一个持续调用递归函数的卡片生成器。
以下是我的两个功能
public static string GenerateHoleCards()
{
Random rnd = new Random(Guid.NewGuid().GetHashCode());
string cardOne = ranks[rnd.Next(0, 12)];
string suitCardone = suits[rnd.Next(0, 3)];
string cardTwo = ranks[rnd.Next(0, 12)];
string suitCardtwo = suits[rnd.Next(0, 3)];
while (!CheckForDealtHoleCards(cardOne + suitCardone, cardTwo + suitCardtwo))
{
GenerateHoleCards();
}
return cardOne + suitCardone + cardTwo + suitCardtwo;
}
private static bool CheckForDealtHoleCards(string holeCard1, string holeCard2)
{
if (holeCard1 == holeCard2)
{
return false;
}
if (dealtHolecards.Contains(holeCard1) || dealtHolecards.Contains(holeCard2))
{
return false;
}
dealtHolecards.Add(holeCard1);
dealtHolecards.Add(holeCard2);
return true;
}
当GenerateHoleCards
返回我的字符串时,它会在调用我的函数时跳回到我的字符串。
我可能在这里有一个思考错误,所以它们在哪里?
答案 0 :(得分:3)
这是一种妄想。你的方法自称。在该调用返回之后,您处于调用它的方法中,这是相同的方法。
如果查看调用堆栈的深度,可以看到该方法调用自身的次数。在return
语句之后,该深度减少了一个。
请注意,在GenerateHoleCards();
语句中,您不会从通话中获取返回值。
也许你想要这样的东西而不是递归:
public static string GenerateHoleCards()
{
// rnd should be declared elsewhere, the seed should be sane
string cardOne, suitCardone, cardTwo, suitCardtwo;
do
{
cardOne = ranks[rnd.Next(0, 12)];
suitCardone = suits[rnd.Next(0, 3)];
cardTwo = ranks[rnd.Next(0, 12)];
suitCardtwo = suits[rnd.Next(0, 3)];
} while (!CheckForDealtHoleCards(cardOne + suitCardone, cardTwo + suitCardtwo));
return cardOne + suitCardone + cardTwo + suitCardtwo;
}