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

#include <stdio.h> int current = 1; int remaining = 1; void print_sequence(int n) { if (n == 0) { return; } printf("%d", current); remaining--; if (remaining == 0) { current++; remaining = current; } print_sequence(n - 1); } int main() { return 0; }
这段代码定义了一个递归函数 `print_sequence`,它试图打印一个数字序列。全局变量 `current` 表示当前要重复打印的数字,`remaining` 表示当前数字还需要打印的次数。每次调用函数时,打印当前数字,减少剩余次数,如果剩余次数为0,则递增当前数字并重置剩余次数。但 `main` 函数中没有调用 `print_sequence`,所以程序运行后没有任何输出。

- 你的 `main` 函数没有调用 `print_sequence`,所以程序不会打印任何内容。你需要添加一个调用,并传入一个参数 n 来控制序列的长度。
- 递归的终止条件是 `n == 0`,但每次递归调用 `print_sequence(n - 1)` 会减少 n,而 `remaining` 和 `current` 的变化是独立的。思考一下:当 n 很大时,递归深度会很大,可能导致栈溢出。考虑是否可以用循环代替递归,或者确保 n 不会太大。