在线编译器 C

#include <stdio.h> void print_num(int num) if(num==0){ printf("0 "); return; } if (num < 0) { printf("%d ",num); return; } print_num(num / 10); printf("%d ", num % 10); } int main() { printf("Hello, World!\n"); return 0; }
这段代码定义了一个递归函数 `print_num`,意图是按顺序打印整数的每一位数字。但代码中存在语法错误和逻辑问题。

- 函数定义后缺少左花括号 `{`,导致编译错误。C语言中函数体必须用花括号括起来。
- 递归逻辑有缺陷:当 `num` 为负数时,直接打印整个数并返回,没有分解每一位;当 `num` 为正数时,递归调用 `print_num(num / 10)` 会先打印高位,但递归终止条件 `num==0` 会导致无法处理数字0本身(虽然单独处理了0,但递归中遇到0会直接打印并返回,可能破坏数字分解顺序)。

- 检查函数定义的花括号是否完整。在 `void print_num(int num)` 后面应该有一个 `{` 开始函数体。
- 思考递归终止条件:当 `num` 为0时,你希望只打印一个0,还是希望递归继续分解?当前代码中,递归调用 `print_num(num / 10)` 最终会传入0,此时会打印0并返回,这会导致像123这样的数字输出为"0 1 2 3",而不是"1 2 3"。考虑如何避免递归过程中多余的0输出。