C语言质因数分解程序输出末尾重复质因子问题排查
问题根因
你的代码重复输出的核心问题有两个:
- 值传递特性+递归后未终止当前逻辑:C语言函数参数是值传递,你在
primefac函数内修改的n是局部变量,递归调用处理完剩余值后,当前层级的函数还会继续执行count++的循环。以输入15为例:
第一层调用primefac(15,3)时,匹配到15%30,打印3,把局部n更新为5后调用primefac(5,3);第二层调用会正常打印5,递归返回后第一层的局部n还是5,count继续递增到5时,会再次匹配到5%50,重复打印5。 - 函数声明为
int返回值但全程没有return语句,属于未定义行为,也可能引发异常输出。
修复方案
最简单的修改是在递归调用后直接终止当前函数执行,同时修正函数返回值、去掉无用头文件:
#include <stdio.h> // 去掉无用的string.h头文件,返回值改为void void primefac(int n, int count) { while (n > 2) { int i = 2; while (n % count == 0) { if (count % i == 0 && count == i) { printf("%d\n", count); n = n / count; primefac(n, 3); // 递归处理完后直接返回,不再执行当前层后续循环 return; } else { i++; } } count++; } } int main() { int n; scanf("%d", &n); while (n % 2 == 0) { printf("%d\n", 2); n = n / 2; } primefac(n, 3); return 0; }
如果想要更稳定的实现,也可以直接去掉递归,用纯迭代逻辑处理,避免递归层级溢出的风险。
内容的提问来源于stack exchange,提问作者pankaj rana
相关产品推荐
相关产品推荐

