C++ 使用递归添加数字

C++ 使用递归添加数字,c++,C++,我试图把一个数字中的所有数字相加,但它只把第一个和最后一个数字相加。例如,1111->1+1+1=4但我得到了2,47879->35但我得到了13,依此类推 代码如下: #include <iostream> using namespace std; int input(int &n) { cin >> n; return 0; } int sum(int n, int &s) { int left = n % 10;

我试图把一个数字中的所有数字相加,但它只把第一个和最后一个数字相加。例如,
1111->1+1+1=4
但我得到了2,
47879->35
但我得到了13,依此类推

代码如下:

#include <iostream>
using namespace std;
int input(int &n)
{
    cin >> n;
    return 0;
}
int sum(int n, int &s)
{
    int left = n % 10;
    
    if (n < 10)
    {
        return left;
    }
    else
    { 
        s =s+ left + sum( n / 10, s);
    }
}
int main() {
    int n, s = 0;
    input(n);
    sum(n, s);
    cout << s;
}
#包括
使用名称空间std;
int输入(int&n)
{
cin>>n;
返回0;
}
整数和(整数n,整数和s)
{
int left=n%10;
如果(n<10)
{
左转;
}
其他的
{ 
s=s+左+和(n/10,s);
}
}
int main(){
int n,s=0;
输入(n);
总和(n,s);

cout您可以使用这个简单得多的函数:

constexpr int sum(int n) {
  return n ? n%10 + sum(n/10) : 0;
}
void sum(int n, int &s)
{
    int left = n % 10;

    s += left;

    if (n < 10)
        return;
    else
        sum(n / 10, s);
}
或者,如果您希望它是尾部递归的:

int sum(int n, int s = 0) {
  return n ? sum(n/10, s + n%10) : s;
}

在您的实现中,您永远不会返回
else
分支。

您可以使用这个简单得多的函数:

constexpr int sum(int n) {
  return n ? n%10 + sum(n/10) : 0;
}
void sum(int n, int &s)
{
    int left = n % 10;

    s += left;

    if (n < 10)
        return;
    else
        sum(n / 10, s);
}
或者,如果您希望它是尾部递归的:

int sum(int n, int s = 0) {
  return n ? sum(n/10, s + n%10) : s;
}

在您的实现中,您永远不会在
else
分支上返回。

函数
sum
的返回类型为int。但是在递归路径中,一些函数调用不会返回任何内容。(if
else
执行而不是
if

您可以简单地使用此功能:

constexpr int sum(int n) {
  return n ? n%10 + sum(n/10) : 0;
}
void sum(int n, int &s)
{
    int left = n % 10;

    s += left;

    if (n < 10)
        return;
    else
        sum(n / 10, s);
}
void sum(整数n、整数s)
{
int left=n%10;
s+=左;
如果(n<10)
返回;
其他的
总额(不含10美元);
}

函数
sum
的返回类型为int。但在递归路径中,某些函数调用不返回任何内容。(if
else
执行而不是
if

您可以简单地使用此功能:

constexpr int sum(int n) {
  return n ? n%10 + sum(n/10) : 0;
}
void sum(int n, int &s)
{
    int left = n % 10;

    s += left;

    if (n < 10)
        return;
    else
        sum(n / 10, s);
}
void sum(整数n、整数s)
{
int left=n%10;
s+=左;
如果(n<10)
返回;
其他的
总额(不含10美元);
}

Your sum()并不总是返回值。我的意思是,如果(n<10)为false,它会返回什么?如果英语不是您的母语,您可能不知道
n%10
给出的是右数字,而不是左数字。不,“左”表示在您为10算出数字后的“剩余”,就像“左”一样“神圣10”之后的123是3:)很抱歉误会您的sum()并不总是返回值。我的意思是,如果(n<10)为false,它会返回什么?如果英语不是您的母语,您可能没有意识到
n%10
给出的是右数字,而不是左数字。不,“左”表示“剩余”在你算出10的数字之后,就像在算出10之后的“左”123是3:)对不起,误解了,如果我把第二个代码改成“int sum(int n,int&s){s+=n%10;返回n?sum(n/10,s):s;}``谢谢你,先生:))的话,第二个代码可以工作,如果我把它改成“int sum”(int n,int&s){s+=n%10;返回n?sum(n/10,s):s;``谢谢你,先生:))的话(int n,int&s){s+=n%10;返回n?sum(n/10,s):s;}``谢谢你,先生:))你的代码也可以工作,先生。你可以使用
void
这样你就不必返回值,继续递归函数并更改主值“&s”。我会注意到的。谢谢。:)您的代码也可以工作,先生。您可以使用
void
,这样就不必返回值,继续递归函数并更改主值“&s”。我会注意到的。谢谢。:)