Онлайн компилятор 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 = 1; void print_sequence(int n) { if (n <= 0) { return; } if (n >= current) { print_times(current, current); print_sequence(n - current); current++; } else { print_times(current, n); } } int main() { int x; scanf("%d", &x); print_sequence(x); return 0; }
这段代码试图打印一个序列,其中每个数字重复出现多次,例如输入5时可能期望输出"1 2 2 3 3 3"这样的模式。代码使用递归函数`print_times`来重复打印一个数字,`print_sequence`则控制整个序列的生成。

代码中有一个逻辑问题:全局变量`current`在递归过程中被修改,但递归调用`print_sequence(n - current)`之后才执行`current++`,这可能导致`current`的值在递归的不同层级中不一致,从而影响序列的正确性。

- 注意全局变量`current`在递归中的变化时机。当`print_sequence`递归调用自身时,`current`的值在调用前后是否保持一致?考虑递归返回后`current`的值发生了什么变化。
- 思考递归的终止条件与`current`递增的关系。当`n`小于`current`时,代码执行了`print_times(current, n)`,但此时`current`的值是否已经正确反映了当前应该打印的数字?