Онлайн компилятор 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); void print_prime_factors(x); return 0; }
这段代码试图打印一个整数的质因数分解,但存在几个问题。

函数 `print_prime_factors` 使用递归,但逻辑不完整。当 `n` 能被 `delitel` 整除时,它打印 `delitel` 并更新 `n`,但之后没有继续递归处理新的 `n`。当 `n` 不能被 `delitel` 整除时,它递归调用自身并试图增加 `delitel`,但 `delitel++` 是后置递增,会先传入原值再自增,导致无限递归。另外,`n <= 2` 的终止条件也不正确,因为质因数分解需要处理所有大于1的整数。

在 `main` 函数中,调用 `print_prime_factors` 的方式错误,不应该写 `void`。

- 检查递归逻辑:当 `n` 能被 `delitel` 整除后,应该继续用新的 `n` 和相同的 `delitel` 进行递归,而不是直接返回。
- 注意 `delitel++` 和 `++delitel` 的区别,以及递归调用时参数传递的值。