Language agnostic 用户输入的递归-优雅还是奇怪?
Dev cpp附带了一个示例程序Jackpot,其中包含一个GetResults函数: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: "
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;
}
有没有想过什么是堆栈溢出?试着按照代码编写的方式输入一个太大的数字,你会发现: