1

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 - 这正是我考虑它的原因,但现在我可以看到它是相当愚蠢的想法:)我想知道谁把它放在一个示例程序中......

感谢您的输入!

4

3 回答 3

2

这肯定会导致堆栈溢出,所以不应该这样做!取决于堆栈大小,您可以多久执行一次,但它肯定会崩溃。在您的示例中,生命数阻止了递归深度,因此这看起来不错,因为它不会大于 1000 甚至 100,但您通常不应该使用它。

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

于 2009-01-19T08:51:49.670 回答
1

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

于 2009-01-19T08:53:20.277 回答
1

不!坏的!

这根本不是好的设计。最好的方法是将它包装在调用者的 while 循环中。IE

int input = 0;
while (GetInt(&input))
{
    if (input > something)
    {
        cout << "Too big";
        life--;
    }
    else
        break;
}

有没有想过 StackOverflow 是什么?尝试输入一个对于编写代码的方式来说太大的数字,您会发现:)

于 2009-01-19T08:54:41.660 回答