函数继续返回while循环

时间:2014-08-24 21:52:06

标签: c# while-loop

我的问题:一个持续调用递归函数的卡片生成器。

以下是我的两个功能

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返回我的字符串时,它会在调用我的函数时跳回到我的字符串。 我可能在这里有一个思考错误,所以它们在哪里?

1 个答案:

答案 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;  
}