递归方法倒计时,赔率甚至

时间:2014-05-29 07:13:59

标签: c++ recursion computer-science

因此,手头的任务是创建一个递归方法,该方法接受一个数字,数字,并将平方数字从一个打印到指定的最大数字。首先,显示奇数正方形,从最大值向下计数到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
            }
        }
    }

2 个答案:

答案 0 :(得分:3)

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

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 :(得分:0)

首先,没有必要从square函数返回任何东西,因为你实际上没有捕获它的输出。

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

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