我们初学者这应该互相帮助。:)
我可以建议一个基于在递归函数内使用静态变量的解决方案。
这是一个示范程序。
#include <iostream>
void OddEvenSquares(unsigned int n)
{
static unsigned long long int even;
if (n != 0)
{
if (n % 2)
{
std::cout << static_cast<unsigned long long int>(n) * n << ' ';
OddEvenSquares(n - 1);
}
else
{
even += 2;
OddEvenSquares(n - 1);
std::cout << even * even << ' ';
even -= 2;
}
}
}
int main()
{
const unsigned int N = 10;
for (unsigned int i = 1; i <= N; i++)
{
OddEvenSquares(i);
std::cout << std::endl;
}
}
它的输出是
1
1 4
9 1 4
9 1 16 4
25 9 1 16 4
25 9 1 36 16 4
49 25 9 1 36 16 4
49 25 9 1 64 36 16 4
81 49 25 9 1 64 36 16 4
81 49 25 9 1 100 64 36 16 4
或者函数可以有默认参数第二个参数。
例如
#include <iostream>
std::ostream & OddEvenSquares(unsigned int n, std::ostream &os = std::cout)
{
static unsigned long long int even;
if (n != 0)
{
if (n % 2)
{
std::cout << static_cast<unsigned long long int>(n) * n << ' ';
OddEvenSquares(n - 1, os);
}
else
{
even += 2;
OddEvenSquares(n - 1, os);
os << even * even << ' ';
even -= 2;
}
}
return os;
}
int main()
{
const unsigned int N = 10;
for (unsigned int i = 1; i <= N; i++)
{
OddEvenSquares(i) << std::endl;
}
}
程序输出将如上述所示的相同。
至于你的方法,当有奇数两个独立的递归函数和偶数则函数passToRecursive
可以看看下面的方式
void passToRecursive(int num)
{
if (num > 0)
{
int odd, even;
if (num % 2)
{
odd = num;
even = odd - 1;
}
else
{
even = num;
odd = even - 1;
}
recursiveOdd(odd);
recursiveEven(even);
}
}
您可以将内部的if-else语句更改为有条件的经营者。例如
void passToRecursive(int num)
{
if (num > 0)
{
int odd, even;
num % 2 ? (odd = num, even = odd - 1)
: (even = num, odd = even - 1);
recursiveOdd(odd);
recursiveEven(even);
}
}
事实上,你甚至不需要定义两个递归函数,因为它们的物体可以是相同的。
所以功能passToRecursive
可以像
void passToRecursive(int num)
{
if (num > 0)
{
int odd, even;
num % 2 ? (odd = num, even = odd - 1)
: (even = num, odd = even - 1);
recursiveSquares(odd);
recursiveSquares(even);
}
}
重视这一说法
std::cout << static_cast<unsigned long long int>(n) * n << ' ';
两个整数的乘积可以比可以存储在int
型或unsigned int
值的最大值。因此,您需要使用一些较大的整数类型,例如long long int
或unsigned long long int
。
通常我的答案是最好的。:)
什么是关于这个任务的递归? –
@ V.K。,它必须使用递归函数完成的事实... – Podo