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

#include <stdio.h> void print_a_to_b(int a, int b) { if (a < b) { if (a = b) { printf("%d ", a); } else { printf("%d", a); print_a_to_b(a + 1); } } else if (a > b) { if (a = b) { printf("%d ", a); } else { printf("%d", a); print_a_to_b(a - 1); } } int main() { int x, y; scanf("%d%d", &x, &y); print_n_to_1(x, y); return 0; }
这段代码试图实现一个递归函数,打印从a到b之间的所有整数。但代码中有几个关键问题。

- 在递归调用时,函数只传了一个参数,但函数定义需要两个参数,这会导致编译错误。
- 条件判断中使用了赋值运算符 `=` 而不是比较运算符 `==`,这会导致逻辑错误。
- 函数名在定义和调用时不匹配,定义是 `print_a_to_b`,但调用时写成了 `print_n_to_1`。
- `main` 函数被错误地放在了 `print_a_to_b` 函数的花括号内部,这会导致语法错误。

- 检查递归调用时是否传递了正确的参数数量,函数定义有两个参数,调用时也应该有两个。
- 检查条件判断中是否误用了赋值运算符,比较两个值是否相等应该用 `==`。