Online Compiler C

#include <stdio.h> void print_a_to_b(int a, int b) { if (a > b) { if (a < b) { return; } printf("%d ", a); print_a_to_b(a - 1, b); } if (a < b) { if (a > b) { return; } printf("%d ", a); print_a_to_b(a + 1, b); } } int main() { print_a_to_b(10, 20); return 0; }
这段代码试图用递归函数打印从a到b的所有整数,但逻辑上有问题。函数内部的条件判断互相矛盾,导致无法正确执行。

- 在 `if (a > b)` 分支里,又检查了 `if (a < b)`,这个条件永远不成立,所以 `return` 永远不会执行。同样,在 `if (a < b)` 分支里检查 `if (a > b)` 也是多余的。这些内部条件判断应该去掉,或者重新思考递归的终止条件应该放在哪里。

- 递归调用时,当 `a > b` 时你让 `a` 递减,当 `a < b` 时让 `a` 递增,这个思路是对的。但你需要确保递归最终会停止。想一想,当 `a` 和 `b` 相等时,应该做什么?目前代码没有处理 `a == b` 的情况,这会导致递归无法结束。