在线编译器 C

#include <stdio.h> int digit_sum(unsigned int n) { if (n = 0){ return 0; } return n % 10 + digit_sum(n / 10); } int main() { return 0; }
这段代码定义了一个递归函数 `digit_sum`,意图是计算一个无符号整数的各位数字之和。但代码中存在一个逻辑错误,导致函数无法正确工作。

- 在 `if (n = 0)` 这一行,你使用了赋值运算符 `=` 而不是比较运算符 `==`。这会将 `n` 赋值为 0,然后判断这个赋值结果(即 0)是否为真,而 0 在 C 语言中被视为假,所以条件永远不会成立,递归会无限进行下去,最终导致栈溢出。应该使用 `==` 来比较是否相等。
- 另外,递归的终止条件需要确保当 `n` 为 0 时正确返回 0,但当前写法因为赋值错误,实际上永远不会进入这个分支。