Онлайн компилятор 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++); } } int main() { int x; scanf("%d", &x); print_prime_factors(x, 2); return 0; }
这段代码试图用递归方式打印一个整数的质因数分解,但存在逻辑错误。函数 `print_prime_factors` 接收一个数 `n` 和当前尝试的除数 `delitel`,期望输出所有质因数。

代码的主要问题在于递归逻辑不完整:当找到一个因数后,它只处理了一次除法,但没有继续用同一个因数检查是否能再次整除(例如 8=2*2*2 的情况)。另外,当 `n` 小于等于 2 时直接打印并返回,这会导致像输入 1 时输出 "1 ",而 1 不是质因数。

- 当 `n % delitel == 0` 时,你只打印了 `delitel` 并做了一次除法,但之后没有继续用同一个 `delitel` 检查新的 `n` 是否能被再次整除。你需要考虑如何让程序继续用同一个除数尝试。
- 递归调用 `print_prime_factors(n, delitel++)` 中,`delitel++` 是后置递增,实际传递的是递增前的值,这会导致无限递归。你应该使用 `delitel + 1` 或前置递增。