You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 14:36:05