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

如何在质因数分解递归函数中仅执行一次is_prime检查?

解决方案

你的问题核心是递归过程中重复执行了初始的质数检查,导致分解到最后一个质数时触发了错误提示。要实现“仅执行一次初始检查,后续递归跳过该检查”的需求,同时满足每次调用质因数分解相关函数时都调用is_prime,可以用拆分函数的方式,把初始检查和递归分解逻辑分开,既清晰又符合要求。

修改后的代码

#include <iostream>
using namespace std;

bool is_prime(int input){
    bool prime = true;
    if(input == 0 || input ==1){
        prime = false;
    }
    for (int i = 2; i <= input/2; i++) {
        if (input % i == 0) {
            prime = false;
            break;
        }
    }
    return prime;
}

// 内部递归辅助函数:负责质因数分解,每次调用会通过is_prime判断剩余数
void prime_factorization_helper(int input){
    int num = 2;
    // 找到第一个质因数
    while(input % num != 0) num++;
    cout << num << " ";
    int remaining = input / num;
    // 判断剩余数是否为质数,这里调用了is_prime
    if(is_prime(remaining)){
        cout << remaining << endl;
    } else {
        prime_factorization_helper(remaining);
    }
}

// 对外入口函数:仅做一次初始质数检查
void prime_factorization(int input){
    if(is_prime(input)){
        cout << "That is a prime number" << endl;
    } else {
        prime_factorization_helper(input);
    }
}

// 测试示例
int main(){
    prime_factorization(14); // 输出:2 7
    prime_factorization(7);  // 输出:That is a prime number
    return 0;
}

逻辑说明

  1. 入口函数prime_factorization:只在第一次调用时执行is_prime检查,如果输入本身是质数,直接打印提示;否则调用辅助函数开始分解。
  2. 辅助函数prime_factorization_helper:专注于质因数分解,每次递归时都会调用is_prime判断剩余数值是否为质数——如果是,直接输出该质数结束分解;如果不是,继续递归分解剩余数值。
  3. 对于输入14的场景:入口函数判断14不是质数,调用辅助函数找到第一个质因数2并输出,剩余数值7通过is_prime判断为质数,直接输出7,最终结果为2 7,符合预期。

内容的提问来源于stack exchange,提问作者ibucksss

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 05:31:00