Онлайн компилятор C

#include <stdio.h> void print_digits_reverse(int n) { if (n == 0) { printf("0"); return; } int digit = n % 10; printf("%d", digit); if (n / 10 != 0) { printf(" "); print_digits_reverse(n / 10); } }
这段代码定义了一个递归函数 `print_digits_reverse`,它接收一个整数 `n`,然后按从低位到高位的顺序输出每一位数字,数字之间用空格分隔。例如输入 1234,会输出 "4 3 2 1"。但代码存在一个逻辑问题。

- 当输入为 0 时,函数直接输出 "0" 并返回,这符合预期。但对于其他数字,比如输入 10,输出会是 "0 1",这看起来正确,但注意如果输入是负数,比如 -123,取模运算 `n % 10` 在 C 中会得到负数,导致输出负号出现在数字之间,不符合通常的预期。

- 另外,递归的终止条件只处理了 `n == 0` 的情况,但没有处理 `n` 为负数的情况。当 `n` 为负数时,递归调用 `n / 10` 会逐渐趋近于 0 但可能永远不会等于 0(例如 -1 / 10 在 C 中是 0,但 -1 % 10 是 -1),这会导致输出负号,并且递归可能不会正确结束。