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

#include <stdio.h> void print_prime_factors(int n, int delitel) { if (n == 1) { return; } if(n == 0){ return; }else if (n % delitel == 0) { printf("%d ", delitel); void print_prime_factors(n/delitel, delitel=2); } 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; }
这段代码试图用递归方式输出一个整数的所有质因数。主要思路是从除数2开始,如果能整除就输出该除数,并递归处理商;如果不能整除则尝试下一个除数。

代码中存在几个关键问题:

- 第10行递归调用时,写法 `void print_prime_factors(n/delitel, delitel=2)` 是错误的。递归调用时不需要写返回类型 `void`,而且参数传递应该直接写表达式,不能使用赋值语句 `delitel=2`。这里你想在递归时重置除数为2,但参数传递的写法不正确。

- 第6-7行的 `if(n == 0)` 分支虽然处理了0的情况,但逻辑上质因数分解对0没有意义,而且这个分支与前面的 `if (n == 1)` 是并列关系,但你的 `else` 只与最近的 `if` 配对,导致结构可能不符合预期。建议重新考虑条件分支的组织方式。