Language agnostic 用户输入的递归-优雅还是奇怪?

Language agnostic 用户输入的递归-优雅还是奇怪?,language-agnostic,recursion,Language Agnostic,Recursion,Dev cpp附带了一个示例程序Jackpot,其中包含一个GetResults函数: void GetResults () { . . . else if (i>j) { cout << "Too BIG\n"; life = life - 1; // -1 to the user's "life" cout << "Number of remaining life: "

Dev cpp附带了一个示例程序Jackpot,其中包含一个GetResults函数:

void
GetResults ()
{
   .
   .
   .

     else if (i>j)
     {
        cout << "Too BIG\n";
        life = life - 1;    // -1 to the user's "life"
        cout << "Number of remaining life: " << life << "\n\n";
        GetResults();
     }
这是一种反复请求用户输入的优雅方式吗?当然,它比用do-while循环环绕~20行更可读。我倾向于喜欢它,但我不经常看到这样的事情,所以我不确定。你怎么看

编辑:在你的例子中,递归深度是由生命数阻止的,所以这看起来没问题,因为它不会超过1000甚至100-这正是我考虑它的原因,但现在我可以看出这是一个相当愚蠢的想法:我想知道是谁把它放在示例程序中


谢谢大家的支持

这肯定会导致堆栈溢出,所以不应该这样做!这取决于堆栈大小,但它肯定会崩溃。在您的示例中,递归深度是由生命数阻止的,因此这似乎是可以的,因为它不会超过1000甚至100,但您一般不应该使用它


我也不同意可读性,因为缩进有助于识别while循环中的块,但是递归对于这样的任务非常少见,我认为它经常会让人困惑。

这肯定会导致堆栈溢出,所以不应该这样做!这取决于堆栈大小,但它肯定会崩溃。在您的示例中,递归深度是由生命数阻止的,因此这似乎是可以的,因为它不会超过1000甚至100,但您一般不应该使用它


我也不同意可读性,因为缩进有助于识别while循环中的块,但是递归对于这样的任务非常少见,我认为它经常会让人困惑。

除非您想测试应用程序的堆栈大小,否则这不是一个好方法。

这不是一个好方法,除非您想测试应用程序的堆栈大小

不!糟糕

这根本不是一个好的设计。最好的方法是在调用者处将其包装成while循环。即

int input = 0;
while (GetInt(&input))
{
    if (input > something)
    {
        cout << "Too big";
        life--;
    }
    else
        break;
}
有没有想过什么是堆栈溢出?试着按照代码编写的方式输入一个太大的数字,你会发现:

不!糟糕

这根本不是一个好的设计。最好的方法是在调用者处将其包装成while循环。即

int input = 0;
while (GetInt(&input))
{
    if (input > something)
    {
        cout << "Too big";
        life--;
    }
    else
        break;
}
有没有想过什么是堆栈溢出?试着按照代码编写的方式输入一个太大的数字,你会发现: