我的函数必须能够打印数字 1+1+1.... 的总和才能达到 N。我只能输入 N。例如:
sumaRecursiva(6): 1+1+1+1+1+1=6
。
这就是我所拥有的:
int sumaRecursiva(int y) {
int x=0;
if (x == y){
return y;
}
else {
x += 1;
cout << x << "+" <<endl;
sumaRecursiva(y-1);
}
}
您可能需要另一个函数来处理打印中需要的
+
字符少于您需要的 1
s
void printSum(int y) {
if (y == 0) return;
cout << 1;
printPlusRecursive(y - 1);
}
void printPlusRecursive(int y) {
if (y == 0) return;
cout << '+' << 1;
printPlusRecursive(y - 1);
}
或更短但更复杂的版本:
void printSum(int y, bool firstCall = true) {
if (y == 0) return;
if (firstCall) cout << 1;
else cout << '+' << 1;
printSum(y - 1, false);
}
如果您希望输出完全为
1+1+1+1+1+1=6
那么您将需要一个辅助函数 sumaRecursivaHelper()
来打印 1+
和外部函数来打印 =n
我相信其他答案都不包括。
#include <iostream>
using namespace std;
void sumaRecursivaHelper(int x) {
if (x == 0) {
cout << 1;
}
else {
cout << "1+";
sumaRecursivaHelper(x - 1);
}
}
void sumaRecursiva(int x) {
if (x == 0) {
cout << 0;
}
else {
sumaRecursivaHelper(x);
}
cout << "=" << x;
}
int main()
{
sumaRecursiva(6);
return 0;
}
你的递归函数应该返回一个值。
传递给递归的值通常用于测试转义条件(通常不用作结果的一部分)。
int sum(int N)
{
if (N == 0) {
return 0; // I like zero as the escape value.
// Though this will give you
// sum(6) = 1 + 1 + 1 + 1 + 1 + 1 + 0 = 6
// If you only want to add ones change
// the escape condition to 1 and return 1
// Though this will prevent you doing sum(0)
}
return 1 + sum(N-1);
}