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

#include <stdio.h> void print_1_to_n(unsigned int n) { if (n<1){ return; } print_1_to_n(5); printf("%u\n",n); }
这段代码定义了一个递归函数 `print_1_to_n`,目的是打印从1到n的数字。但代码中存在逻辑错误,导致它无法正确工作。

- 递归函数内部直接调用了 `print_1_to_n(5)`,这是一个固定值,而不是根据参数 `n` 逐步递减。这会导致无限递归(或直到栈溢出),因为每次调用都传入5,永远不会达到终止条件。
- 正确的递归思路应该是每次调用时传入比当前 `n` 小1的值,例如 `print_1_to_n(n - 1)`,这样参数会逐渐减小到1以下,从而触发终止条件。
- 另外,打印语句的位置需要调整。如果先递归再打印,会先处理更小的数字,最后打印当前数字,这样就能实现从1到n的顺序输出。