Online Compiler C

#include <stdio.h> void print_prime_factors(int n, int delitel){ if(n==1){ return; }print_prime_factors(n/delitel,delitel+1); printf("%d",delitel); } int main() { int x; scanf("%d",&x); print_prime_factors(x,2); return 0; }
这段代码试图用递归方式输出一个整数的质因数分解,但逻辑上有问题。函数 `print_prime_factors` 每次递归都将 `n` 除以 `delitel`,并递增 `delitel`,然后打印 `delitel`。这会导致输出所有尝试过的除数,而不是只输出质因数。

- 递归调用 `print_prime_factors(n/delitel, delitel+1)` 在打印之前执行,所以会先处理更小的数,但 `delitel` 递增太快,会跳过重复的质因数(比如 8 的质因数 2 会出现三次,但这里只会尝试一次 2)。
- 打印语句 `printf("%d",delitel)` 会输出当前除数,但只有当 `n` 能被 `delitel` 整除时才应该打印,而代码中没有检查整除条件。