递归方法计数上下,奇数和偶数
recursion method to count down and up, odds and even
因此,手头的任务是创建一个递归方法,该方法接受一个数字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 相关文章:
- C++:正在检查LinkedList中的回文-递归方法-错误
- 数组元素打印的递归方法
- 我对 leetcode 72 上的递归方法感到茫然
- 使用递归方法遇到分段错误
- 我的链接列表反向递归方法的代码的问题是什么?
- 在链接列表中找到值的递归方法
- 我应该如何实现递归方法以找到在C++中形成最大堆的多种方法
- 使用递归方法将矢量作为输入时进行分割故障
- 使用递归方法的类,使用int矢量元素作为输入
- 3D 迷宫递归方法 - C++
- 这种遍历二叉树的递归方法在一些递归后崩溃!为什么?
- 迭代器回到递归方法的开头
- 如何创建一个递归方法来比较两个值
- 为什么将十进制转换为二进制的递归方法比迭代、使用和返回字符串更快
- 递归方法中的 C++ 凸包
- 如何将查找组合的几个循环代码转换为递归方法
- 删除单向链表最后一个元素的递归方法
- 反转字符串的递归方法
- 使用递归方法反转ifstream输入
- 递归方法计数上下,奇数和偶数