Online Compiler C

#include <stdio.h> int sum_digits(int n){ if(n<10){ return n; }else{ return 0+sum_digits(n/10); } } int main() { printf("%d",sum_digits(1235)); return 0; }
这段代码定义了一个递归函数 `sum_digits`,意图是计算一个整数的各位数字之和。但实际运行结果会返回 1,而不是期望的 1+2+3+5=11。

- 在递归的 `else` 分支中,你写的是 `return 0+sum_digits(n/10);`,这里加的是 0,而不是当前最低位的数字 `n%10`。这导致每次递归只传递了去掉最后一位的数字,却没有把最后一位的值累加起来。
- 递归的正确思路应该是:当前数字的个位(n%10)加上剩余数字(n/10)的各位和。你需要检查 `else` 分支中应该加什么值。