在线编译器 C

#include <stdio.h> void sumt_to_n(int n) { if (n == 0) return; { sumt_to_n(n) = n + sumt_to_n(n - 1); } } int main() { sumt_to_n(5); return 0; }
这段代码试图计算从1到n的整数和,但存在几个关键问题。

- 第4行:`sumt_to_n(n) = n + sumt_to_n(n - 1);` 这一行试图给函数调用赋值,这在C语言中是不允许的。函数调用不能作为左值(赋值目标)。
- 函数`sumt_to_n`没有返回值,但递归需要返回计算结果。当前函数返回类型是`void`,无法传递求和结果。
- 递归调用`sumt_to_n(n)`会导致无限递归,因为参数没有减少,会一直调用自身直到栈溢出。

- 思考如何让递归函数返回计算结果,而不是尝试赋值给函数调用。
- 检查递归终止条件和递归调用的参数是否正确变化。