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。但是在递归路径中,一些函数调用不会返回任何内容。(ifelse
执行而不是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。但在递归路径中,某些函数调用不返回任何内容。(ifelse
执行而不是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”。我会注意到的。谢谢。:)