如何使用递归解决这个问题?

问题描述 投票:0回答:3

我的函数必须能够打印数字 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);
    }
    
}
c++ recursion
3个回答
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+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;
}

-1
投票

你的递归函数应该返回一个值。
传递给递归的值通常用于测试转义条件(通常不用作结果的一部分)。

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);
}
© www.soinside.com 2019 - 2024. All rights reserved.