【问题标题】:recursion method to count down and up, odds and even倒数和倒数,赔率和偶数的递归方法
【发布时间】:2014-05-29 07:13:59
【问题描述】:

所以手头的任务是创建一个递归方法,它接受一个数字 num,并让它打印出从 1 到指定最大数字的平方数。首先显示奇数格,从最大倒数到 1,然后倒数偶数格(从 2 开始),直到最大偶数。

我知道如何让递归倒计时正常,但我不知道如何让它倒计时。每次我这样做都会陷入无限循环。

int squares(int);
int main()          
{
    cout << "Enter a number: ";
    int num;
    cin >> num;
    squares(num);

    cin.ignore(cin.rdbuf()->in_avail());
    cout << "\nPress only the 'Enter' key to exit program: ";
    cin.get();

    return 0;
}
int squares(int num)
{
    if (num == 1)
    {
            return 1;
    }
    else
    {
        if (num % 2 == 0)
    {
        num -= 1;
        cout << num * num << " ";
        return squares(num - 2);
    }
    else if (!num % 2 == 0)
    {
        cout << num * num << " ";
        return squares(num - 2);
     // edited this because it had an old return i meant to change b4 posting
            }
        }
    }

【问题讨论】:

  • ! 的运算符优先级高于%,因此if (num % 2 == 0)else if (!num % 2 == 0) 并未涵盖所有可能性。可能不是你的问题,但我觉得这很奇怪。
  • 您是否需要在单个函数中执行此操作?
  • @merlin2011 是的。 Abhishek 发布的版本很接近,但它没有考虑数字“1”。它从奇数到偶数穿过正方形,但没有显示#1

标签: c++ recursion computer-science


【解决方案1】:

您的函数每次都需要打印一个值并进行递归调用。在奇数的情况下,您要先输出值,在偶数的情况下,您要先进行递归调用。所以你可以这样做:

void squares(int num)
{
  if (num <= 0)
    return;

  if (num % 2 == 0)
  {
    squares(num - 1);
    cout << num * num << endl;
  }

  else
  {
    cout << num * num << endl;
    squares(num - 1);
  }

}

【讨论】:

  • 这很优雅。 +1
【解决方案2】:

首先,不需要从 squares 函数返回任何内容,因为您实际上并没有捕捉到它的输出。

其次要获得偶数平方,您可以在递归堆栈从其调用中展开后输出它们。

void squares(int num)
{
    if (num <= 1) // Note the base condition.
    {
            return;
    }
    else
    {
        if (num % 2 == 0)
         {
             num -= 1;
             cout << num * num << " ";
             squares(num - 2);
             cout << (num+1) * (num+1) << " "; // now output the even numbered square
         }
         else if (!num % 2 == 0)
         {
             cout << num * num << " ";
             squares(num - 2 + 1);
             cout << (num+1) * (num+1) << " "; // now output the even numbered square
         }
        }
    }

http://ideone.com/UE5Whv

【讨论】:

  • 当您将 squares(num -2 + 1) 线修复为 squares(num - 2) 时,这几乎可以工作。这会循环通过赔率然后是偶数,但不是#1。
  • @AbhishekBansal nvm,我错过了您更改的 + 1。我的坏
  • @jacksonSD 您应该查看 Rainbowgoblin 的答案。它更加优雅。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-07-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-17
  • 1970-01-01
  • 2010-12-09
相关资源
最近更新 更多