Online Compiler C

#include <stdio.h> void print_a_to_b(int a, int b) { if ( a == b ) { printf("a "); return; } // printf("%d " , b); print_a_to_b(a-1, b); } int main() { print_a_to_b(5 ,2); return 0; }
这段代码试图打印从 a 到 b 的所有整数,但实际运行结果并不正确。函数 `print_a_to_b` 每次递归调用时,先打印当前的 b 值,然后递归调用时把 a 减 1,但 b 保持不变。这样会导致无限递归,因为 a 会一直减小,永远不会等于 b(除非初始 a 小于 b),并且每次打印的都是同一个 b 值。

- 你的递归逻辑有误:你希望打印从 a 到 b 的所有数,但当前代码每次递归都打印 b,并且只改变 a 的值。你需要思考如何让每次递归打印不同的数字,并且最终能正确终止。
- 递归的终止条件 `a == b` 是正确的,但递归调用中的参数传递需要调整,使得每次递归时打印的数字向 b 靠近,而不是让 a 一直减小。