在线编译器 C

#include <stdio.h> void print_prime_factors(int n, int delitel){ if(delitel>n){ printf("%d",delitel); return; } if(n%delitel==0){ printf("%d ",delitel); return print_prime_factors(n/delitel, delitel); } if(n%delitel!=0){ return print_prime_factors(n, delitel+1); } } int main(){ int x; scanf("%d",&x); print_prime_factors(x,2); return 0; }
这段代码试图打印一个整数的所有质因数,但存在逻辑错误。函数 `print_prime_factors` 使用递归,从除数2开始检查,如果当前除数能整除n,就打印该除数并递归处理n除以该除数的结果;如果不能整除,则除数加1继续递归。

代码的主要问题在于递归的终止条件。当 `delitel > n` 时,代码会打印 `delitel` 并返回,这会导致输出多余的数。实际上,当除数大于n时,说明n已经分解完毕,应该直接返回而不打印任何内容。

- 检查递归终止条件:当 `delitel > n` 时,应该直接返回,而不是打印 `delitel`。
- 思考质因数分解的完整过程:例如输入12,期望输出是“2 2 3”,但当前代码可能会输出多余的数字。