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