在线编译器 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(52); return 0; }
这段代码定义了一个递归函数 `print_num`,它接收一个整数,然后按顺序输出这个整数的每一位数字,但最后一位数字后面会多一个空格。

- 递归调用 `print_num(num / 10)` 会先处理高位数字,但注意递归调用后紧接着的 `printf` 会输出当前数字的个位,这导致数字被正确按顺序输出。
- 问题在于递归调用后的 `printf` 中使用了 `"%d "`,即数字后跟一个空格。当递归到最高位时(`num < 10`),直接输出数字而不带空格,但后续的递归返回时,每个非最高位数字后面都会输出一个空格,包括最后一位数字。

- 检查递归的终止条件和输出格式:当 `num < 10` 时直接输出数字,这保证了最高位没有多余空格。但递归返回时,每次都会在数字后加空格,导致最后一位数字后面也出现空格。考虑如何让最后一位数字后面不输出空格。