在线编译器 C

#include <stdio.h> void print_prime_factors(int n, int delitel) { if (n < 2) { return; } if ( n % delitel == 0){ printf("%d ", delitel); print_prime_factors(n/delitel, delitel); } print_prime_factors(n, delitel + 1); } int main() { int n; scanf("%d", &n); print_prime_factors(n, 2); return 0; }
这段代码试图用递归方式打印一个整数的所有质因数。它从除数2开始,如果当前除数能整除n,就打印该除数并递归处理n除以该除数的结果;否则将除数加1继续尝试。

代码存在一个逻辑问题:当找到一个质因数后,递归调用 `print_prime_factors(n/delitel, delitel)` 会继续检查同一个除数,但之后还会执行下一行 `print_prime_factors(n, delitel + 1)`,这会导致重复尝试和错误输出。

- 提示1:思考当找到一个因数后,是否应该继续用同一个除数检查,还是应该立即尝试下一个除数?注意递归调用后代码会继续执行下一行,这可能导致不必要的重复。
- 提示2:考虑如何避免在找到因数后还去尝试更大的除数。可以想想递归函数中条件分支的结构,确保每次只走一条路径。