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

#include <stdio.h> void print_1_n(int n) { if (n == 1) { printf("1"); return; } print_1_n(n); printf("%d ", n); }
这段代码定义了一个递归函数 `print_1_n`,意图是从1打印到n。但代码中存在一个关键错误,导致函数会无限递归。

- 递归调用 `print_1_n(n)` 没有改变参数的值,每次调用都传入相同的 `n`,因此永远不会到达终止条件 `n == 1`(除非一开始 `n` 就是1)。这会导致栈溢出。
- 正确的递归思路应该是每次调用时让参数逐渐减小,比如调用 `print_1_n(n-1)`,这样最终会到达基准情况。