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
相关产品推荐
相关产品推荐

