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

#include <stdio.h> void print_1_n(int n) { scanf("%d",&n); if (n == 1) { printf("1"); return; } print_1_n(n - 1); printf("%d ", n); }
这段代码定义了一个递归函数 `print_1_n`,意图是从1打印到n。但函数内部调用了 `scanf` 来读取输入,这会导致每次递归调用都等待用户输入,而不是使用传入的参数 n。

- 函数开头不应该使用 `scanf` 重新读取 n,因为 n 已经作为参数传入。`scanf` 会覆盖参数值,导致递归逻辑混乱。
- 递归打印的顺序是:先递归调用 `print_1_n(n-1)`,再打印当前 n,这样会先打印较小的数字,最后打印最大的数字。但注意当前代码在 n==1 时只打印 "1" 而没有空格,而其他情况打印 "%d " 带空格,输出格式可能不一致。