递归方法计数上下,奇数和偶数

recursion method to count down and up, odds and even

本文关键字:上下 递归方法      更新时间:2023-10-16

因此,手头的任务是创建一个递归方法,该方法接受一个数字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
            }
        }
    }

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

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);
  }
}

首先,不需要从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