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

#include <stdio.h> void print_prime_factors(int n, int delitel) { if (n <= 2) { printf("%d ", n); return; } if (n % delitel == 0) { printf("%d ", delitel); n = n / delitel; } else if (n % delitel != 0) { print_prime_factors(n, delitel+1); } } int main() { int x; scanf("%d", &x); print_prime_factors(x, 2); return 0; }
这段代码试图用递归方式打印一个整数的质因数分解,但存在逻辑错误。

- 当 `n <= 2` 时,直接打印 n 并返回,这会导致对 2 的处理不正确,因为 2 本身是质数,但这里会直接打印 2 并结束,没有考虑 2 可能被多次分解的情况。
- 当 `n % delitel == 0` 时,打印 delitel 并递归调用 `print_prime_factors(n/delitel, delitel)`,但你的代码中递归调用写成了 `print_prime_factors(n, delitel+1)`,这会导致 delitel 被错误地增加,而不是继续用同一个 delitel 检查是否能再次整除。
- 当 `n % delitel != 0` 时,递归调用 `print_prime_factors(n, delitel+1)` 是正确的,但需要确保前面的分支逻辑正确。

- 提示1:检查当 `n % delitel == 0` 时,递归调用应该使用 `n/delitel` 作为新的 n,并且 delitel 不应该增加,因为同一个质数可能多次出现。
- 提示2:考虑边界情况,比如输入 2 或 4,你的代码输出是否符合预期?思考递归的终止条件是否合理。