Онлайн компилятор C

#include <stdio.h> int sum_digits(int n){ int all=0; if(n==1){ return all; }sum_digits(n/10); }return n; int main() { int m,sum; scanf("%d",&m); sum=sum_digits(m); printf("%d",sum); return 0; }
这段代码试图计算一个整数的各位数字之和,但存在几个问题。

首先,函数 `sum_digits` 的递归逻辑不完整。当 `n` 不等于 1 时,它调用了 `sum_digits(n/10)`,但没有将递归结果与当前位的数字相加,也没有返回任何值。另外,`return n;` 这一行写在了函数体外部,导致语法错误。

- 递归计算各位数字之和时,需要将当前最低位数字(`n % 10`)与递归调用 `sum_digits(n/10)` 的结果相加,并返回这个和。
- 递归的终止条件应该是 `n == 0` 时返回 0,而不是 `n == 1` 时返回 `all`(`all` 初始为 0,但逻辑不对)。注意,当 `n` 为个位数时,递归也应正确结束。