在线编译器 C

#include <stdio.h> void print_times(int m, int times) { if (times == 0) { return; } printf("%d ", m); print_times(m, times - 1); } int current = 0; void print_sequence(int n) { if (n <= 0) { return; } if (n >= current) { current++; print_times(current, current); print_sequence(n - current); } else { print_times(current+1, n); } } int main() { int x; scanf("%d", &x); print_sequence(x); return 0; }
这段代码的目标是打印一个序列,但实现中存在逻辑问题。函数 `print_sequence` 试图根据输入 `x` 打印出类似“1 2 2 3 3 3 ...”的序列,即数字 `k` 重复 `k` 次,直到总个数达到 `x`。

代码使用全局变量 `current` 来跟踪当前要打印的数字,但递归逻辑可能导致打印顺序或数量错误。

- 注意 `current` 是全局变量,递归调用会修改它,这可能导致在不同递归层级中 `current` 的值被意外改变。
- 在 `else` 分支中,你使用了 `current+1` 来打印剩余部分,但此时 `current` 可能已经增加过,需要仔细检查这个值是否与预期一致。

建议你手动模拟一个小输入(比如 `x=5`),跟踪 `current` 的变化和每次调用 `print_times` 的参数,看看实际打印结果与期望是否一致。