【问题标题】:Recursion for user input - elegant or strange?用户输入的递归——优雅还是奇怪?
【发布时间】:2010-10-02 04:44:55
【问题描述】:

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

感谢大家的意见!

【问题讨论】:

    标签: language-agnostic recursion


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

        不!糟糕!

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

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-06-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-11-06
          • 2016-11-07
          相关资源
          最近更新 更多