在线编译器 C

#include <stdio.h> void print_num(int num) { if (num < 10) { printf("%d ", num); return; } print_num(num / 10); printf("%d ", num % 10); } int main() { print_num(100); return 0; }
这段代码定义了一个递归函数 `print_num`,它接收一个整数,然后按从左到右的顺序逐位打印这个整数的每一位数字,数字之间用空格分隔。主函数调用 `print_num(100)`,预期输出应该是 "1 0 0 "。

- 递归的终止条件是 `num < 10`,此时直接打印该数字并返回。但对于像 100 这样的数,当递归到 `num = 1` 时,会先打印 "1 ",然后返回上一层继续执行后面的 `printf`,这会导致数字顺序正确,但注意递归调用 `print_num(num / 10)` 是在打印当前位之前,所以实际上是从最高位开始打印。

- 你的代码逻辑正确,但有一个小问题:当 `num` 为 0 时,函数会直接打印 "0 " 并返回,这没问题。但考虑一下,如果输入是负数,比如 -123,当前代码会如何处理?提示:整数除法在 C 中对负数会向零取整,而取模运算的结果符号与被除数相同,这可能导致输出不符合预期。