Онлайн компилятор 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+1)` 这一行有问题:`n%delitel` 是取余数,而不是除法后的商,所以递归调用时传入的不是“除以除数后的结果”,而是余数,这会导致无限递归或错误输出。

- 检查递归调用时应该传入什么值:当 `delitel` 能整除 `n` 时,你需要继续处理 `n` 除以 `delitel` 后的结果,而不是余数。
- 注意递归的顺序:你希望在找到质因数后立即打印,还是先递归再打印?当前是先递归后打印,这会导致因数按相反顺序输出。思考一下质因数分解通常希望按什么顺序输出。