You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++递归实现数位求和仅返回最后一位,该如何修复代码?

代码问题分析
  • 核心错误出在dsum函数的递归返回语句:你写的return(n ,sum);用到了C++的逗号运算符,逗号运算符会依次执行左右两个表达式,最终只返回最后一个表达式的值,这里根本没有触发递归调用,等于每次进入n>0的分支时,直接把当前计算的sum(也就是当前位的值)返回了,所以最后只会得到最后一位的结果。
  • 递归逻辑缺失:你没有在满足递归条件的时候调用dsum本身,函数根本没有走递归流程。
修复方案

有两种常用的改写方式,可按需选择:

方式1:保留累加参数的递归写法

直接把原来的返回语句改成递归调用即可,不需要额外改动其他逻辑:

#include<iostream>
using namespace std;

int dsum (int n, int sum)
{
    if(n>0)
    {
        sum = sum + (n%10);
        n = n/10;
        return dsum(n, sum); // 替换原返回语句,触发递归
    }
    else return sum;

}

int main()
{
    int i = 345;
    int s = dsum (i,0);
    cout<<"Sum is "<<s;
    return 0;
}

方式2:无累加参数的简化递归写法

不需要额外传sum参数,逻辑更简洁:

#include<iostream>
using namespace std;

int dsum (int n)
{
    if(n == 0) return 0;
    return n%10 + dsum(n/10);
}

int main()
{
    int i = 345;
    int s = dsum(i);
    cout<<"Sum is "<<s;
    return 0;
}

两种方式运行后都会输出Sum is 12,符合3+4+5的计算结果。

内容的提问来源于stack exchange,提问作者Keshav Sharma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 00:45:05