Online Compiler C

#include <stdio.h> void print_digits_reverse(int n) { if (n < 10) { printf("%d ", n); return; } printf("%d ", n % 10); print_digits_reverse(n / 10); } int main() { print_digits_reverse(15); return 0; }
这段代码定义了一个递归函数 `print_digits_reverse`,它接收一个整数 `n`,然后按从低位到高位的顺序打印出每一位数字,每个数字后面跟一个空格。在 `main` 函数中,它用 `15` 作为参数调用这个函数,所以输出应该是 `5 1 `。

- 检查递归的终止条件:当 `n < 10` 时,你直接打印 `n` 并返回。但注意,如果 `n` 是一位数,这个逻辑是正确的;然而对于多位数,比如 `15`,递归会先打印个位 `5`,然后递归处理 `1`,此时 `1 < 10`,会打印 `1`。但这里有一个问题:当 `n` 是一位数时,你打印了数字后立即返回,这会导致最后一位数字后面也有空格,但这不是错误。不过,思考一下:如果输入是 `0`,你的代码会打印 `0`,这没问题。但如果输入是负数呢?你的代码没有处理负数的情况,因为 `n < 10` 对负数不成立,会导致无限递归或错误输出。

- 考虑输入为 `0` 的情况:你的代码中 `0 < 10` 成立,会打印 `0` 并返回,这是正确的。但注意,如果输入是 `10`,递归过程是:先打印 `0`,然后递归处理 `1`,打印 `1`,输出 `0 1 `,这符合逆序打印的要求。所以整体逻辑对于非负整数是有效的。